<script src="js/jquery.js"></script>
<script src="js/app.js"></script>
</body>
</html>
Das ist der Idealfall …
<script src="js/jquery-ui.js"></script>
<script src="js/jquery.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/jquery.imageslider.js"></script>
<script src="js/modul2.js"></script>
<script src="js/modul1.js"></script>
<script src="js/app.js"></script>
<script src="js/myOwnFunctions.js"></script>
<script src="js/init.js"></script>
</body>
</html>
… aber in der Regel sieht es doch eher so aus.
<script src="js/jquery-ui.js"></script> <script src="js/jquery.js"></script> <script src="js/jquery.validate.min.js"></script> <script src="js/jquery.imageslider.js"></script> <script src="js/modul2.js"></script> <script src="js/modul1.js"></script> <script src="js/app.js"></script> <script src="js/myOwnFunctions.js"></script> <script src="js/init.js"></script> </body> </html>
Asynchronous Module Definition
define()
wird verwendet, um Module zu definierenrequire()
lädt diese Module asynchron und führt danach Code aus
define('mymodule', ['module1', 'module2'], function( m1, m2 ) {
return m1 + m2;
});
define(
'mymodule', // Modulname (optional)
['module1', 'module2'], // Abhängigkeiten
function( m1, m2 ) {} // Code
);
// Meh.
define(function() {
var Foo = function() { … };
return new Foo();
});
// Yay!
define(function() {
var Foo = function() { … };
return Foo;
});
require(['jquery', 'myapp'], function($, myApp) {
// Wird erst ausgeführt, wenn beide Module geladen sind
myApp.init();
$('body').append( myApp.html );
});
jQuery und viele andere Bibliotheken bringen AMD-Unterstützung schon mit
<script>
Tag benötigt:
<script src="js/require.js" data-main="js/main"></script>
</body>
</html>
require.config({
paths: {
// Core libraries
'jquery' : 'lib/jquery/jquery.min',
'jquery-ui' : 'lib/jquery-ui-1.10.3.custom.min',
'underscore' : 'vendor/lodash',
}
});
Bibliotheken am besten mit 'path' als Dependency angeben, z.B. 'jquery-ui'.
Ändert sich die Version, muss der Pfad nur an einer Stelle geändert werden.
require.config({
shim : {
'backbone': {
// Abhängigkeiten
deps: ['jquery', 'underscore']
// Globales Objekt zur Rückgabe
exports: 'Backbone'
}
}
});
Development
// main.js
require.config({
paths: { 'config' : 'config/app.development' }
});
Build
// build.js / Gruntfile.js
{
paths: { 'config' : 'config/app.production' }
}
var datePicker;
$('input.date').on('click', function() {
if (!datePicker) {
require(['jquery-datepicker'], function(pick) {
datePicker = pick;
pick.init();
});
} else {
datePicker.init();
}
});
require(['json!package.json'], function (package) {
console.log(package.name);
});
Frederic Hemberger (@fhemberger)