On Github ArturDorochowicz / presentation-amd-with-requirejs
// presentation.js define(function () { return { title: 'My presentation', description: '...' }; });Anonymous module. Modules are identified by a module id. Anonymous modules get the id based on the location of the files they are in. One-to-one mapping between modules and files. One module per file.
// presentation.js define({ title: 'My presentation', description: '...' });
// presentation.js define([], function () { return { title: 'My presentation', description: '...' }; });
// main.js define(['jquery', 'presentation'], function ($, presentation) { $(document).ready(function () { $(document.body).text(presentation.title); }); });Dependencies will be evaluated before the module. There is no ordering between dependencies (unless there are dependencies between them, direct or indirect). No globals (except for environment globals: window, document etc.)!
// main.js define(function (require) { var $ = require('jquery'); var presentation = require('presentation'); $(document).ready(function () { $(document.body).text(presentation.title); }); });Simplified CommonJS wrapper. Additionally improves readability and maintainability when there are many dependencies.
// in jQuery since 1.7 define("jquery", [], function() { /* ... */ });
// main.js require( ['jquery', 'knockout', 'PageViewModel'], function ($, ko, PageViewModel) { var vm = new PageViewModel(); $(function () { ko.applyBindings(vm); }); });
<html> <head> <!-- ... --> </head> <body> <!-- ... --> <script src="require.js" data-main="main"></script> </body> </html>Technically, data-main causes a require() call, so main.js could contain a define() call. Doing require() there is a bit of a convention, also allows to alternatively simply include main.js with script tag.
<html> <!-- ... --> <script> var require = { baseUrl: '/Scripts', waitSeconds: 60, urlArgs: 'cache_bust=' + (new Date()).getTime() }; </script> <script src="require.js" data-main="app/main"></script> <!-- ... --> </html>
// Scripts/app/main.js require.config({ paths: { 'jquery': 'lib/jquery-2.1.0' } }); require(['jquery', 'app/presentation'], function () { /* ... */ });
// Scripts/app/presentation.js define( /* ... */ );Default waitSeconds = 7.
require.config({ config: { 'app/presentation': { author: 'The Author' } } });
// app/presentation.js define(['module'], function (module) { var moduleConfig = module.config(); var author = moduleConfig.author; });
require.config({ paths: { 'underscore': 'lib/underscore-1.5.2', 'backbone': 'lib/backbone-1.1.0' }, shim: { 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' }, 'underscore': { exports: '_' } } });
define(['underscore'], function (_) { /* ... */ });
https://github.com/ArturDorochowicz/presentation-amd-with-requirejs