由于现有应用程序具有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