由於現有應用程序具有javascript方面的範圍,結構更好,易於管理/理解和更好地管理需要爲網站的不同部分運行的腳本,因此我決定嘗試並實施RequireJS作爲解決方案。在現有的應用程序上實現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(發展ENV點。 ..閱讀這篇文章:Grunt.js and Require.js - compiling with 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
,對於/profiles
我有profiles.js
。我將如何根據我需要/希望的頁面處理每個.js
?main.js
是常用文件,但網絡中每個模塊都有單獨的.js
文件。 - 我錯過了什麼嗎?
由於您剛剛開始使用RequireJS,因此我會暫停並瀏覽Browserify(http://browserify.org/)。它通過允許你像在NodeJS中那樣編寫require語句來完成所有事情(路徑,填充等)的猜測工作。 '$ = require('jquery')'就是你將jQuery分配給美元符號的方式,只要它是通過你的node_modules中的NPM加載的。想使用已經寫好的庫? 'module.exports'你回來的東西。它使Web組件非常棒。自從我找到它之後,我還沒有使用過RequireJS。 – iamjpg
@iamjpg感謝您的建議。我會看看它 – Alex