![](/img/trans.png)
[英]Implementing requirejs and client-side templating in existing codeigniter hmvc application
[英]Implementing RequireJS on an existing app
由於具有現有應用程序的javascript端,更好的結構化,易於管理/理解以及更好地管理需要為站點的不同部分運行的腳本,我決定嘗試將RequireJS作為解決方案。
我也使用grunt,我利用了grunt-contrib-requirejs現有模塊,在一個地方管理它。
咕嚕
requirejs: {
options: {
baseUrl: "./",
mainConfigFile: "<%= project.scripts %>/build.js",
name: "<%= project.bowerDir %>/almond/almond",
out: "<%= project.scripts %>/main.min.js"
},
debug: {
options: {
optimize: 'none'
}
},
production: {
options: {
optimize: 'uglify2'
}
}
},
build.js
requirejs.config({
baseUrl: "/",
// automatically require on page load in debug mode
deps: ['assets/scripts/main'],
//deps: ['main'],
// automatically require this for production build
// insertRequire: ['assets/scripts/main'],
paths: {
"bower" : "../../../bower_components",
"module": "../modules",
"jquery" : "bower_components/jquery/dist/jquery",
"jquery.ui" : "assets/scripts/vendor/jquery-ui-1.10.3.custom.min",
"jquery.ui.touch-punch": "assets/scripts/vendor/jquery.ui.touch-punch.min",
"lazyload" : "bower_components/jquery.lazyload/jquery.lazyload",
"swfobject" : "assets/scripts/vendor/swfobject",
"cookie" : "assets/scripts/vendor/jquery.cookie",
"query" : "assets/scripts/vendor/jquery.query",
}
}).call(this);
// Load the main app module to start the app
// requirejs(["app", "module/home"]);
main.js
define([
'jquery', 'jquery.ui', 'jquery.ui.touch-punch',
'lazyload', 'swfobject', 'cookie', 'query'
], function (require) {
'use strict';
$(function () {
alert('main.');
// ....
});
});
所以,我到了調用build.js的地步(開發環境......閱讀這篇文章: Grunt.js和Require.js - 用r.js編譯 )......
<script data-main="/assets/scripts/build" src="/assets/scripts/vendor/require.js"></script>
因此,加載build.js
,然后加載main.js
,並執行alert
。 到目前為止,這么好......現在出現了疑問:
jquery
到cookie
和query
)。 我怎么能指望他們已經裝好了? 因為,在我的main.js
我將調用這些庫,但由於未加載它們而導致錯誤。 /articles
我有articles.js
,for /profiles
我有profiles.js
。 如何根據我需要/想要的頁面設法處理每個.js
? main.js
是公共文件,但Web中的每個模塊都有單獨的.js
文件。 在requirejs中,您可以為每個墊片指定依賴項。 ( http://requirejs.org/docs/api.html#config-shim )
因此,如果文件a.js依賴於加載前存在的文件b.js,則可以指定對文件a的依賴性。 每次需要文件a時,首先需要文件b。
例:
requirejs.config({
baseUrl: "/",
// automatically require on page load in debug mode
deps: ['assets/scripts/main'],
//deps: ['main'],
// automatically require this for production build
// insertRequire: ['assets/scripts/main'],
paths: {
"a" : "assets/scripts/vendor/a",
"b" : "assets/scripts/vendor/b",
},
shim: {
"a": {
deps: ["b"]
}
}
}).call(this);
您需要在define回調(您的入口點)中提供有效的標識符作為參數。 帶有縮短列表的演示:
define([
'jquery',
'jquery.ui',
'cookie'
], function(
$,
jQueryUI,
MyCookie
) {
'use strict';
alert( $ ); //your local jQuery
jQueryUI.doSomething();
MyCookie.fooBar( 'I was required' );
});
標識符名稱是您的選擇,但我建議堅持一些約定。 require.js中有更多內容,但這可以幫助您入門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.