我第一次使用优化工具,我遇到了一些问题或疑问。
我正在尝试优化主文件,它像我预期的那样放置jQuery,Backbone和Require模块(然后在整个导航中使用)。但是,假设我有一个jQuery插件,我在几个视图上使用它。我尝试使用build.js文件中的“include”选项将其添加到主文件中。它添加了它(例如jQuery Slides)但是由于我有一个带有define(“jquery-slides”)的视图(再次,一个例子),浏览器再次加载插件的文件。即使它是在主构建文件上。
这是否应该发生?我能解决这个问题吗?
感谢。
这是一些代码。希望它有帮助=)
build.js
{
baseUrl: "javascripts/",
appDir: "..",
dir: "dist",
name: "main-site",
include: ['libs/requirejs/require', jquery-slides'],
insertRequire: ['main-site'],
paths: {
"main-site": 'main-site',
'jquery': 'libs/jquery/jquery',
'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
}
}
主要-site.js
require.config({
baseUrl: "/javascripts/",
paths: {
'jquery': 'libs/jquery/jquery',
'underscore': 'libs/underscore/underscore',
'bootstrap': 'libs/bootstrap/bootstrap.min',
'datepicker': 'libs/bootstrap/plugins/bootstrap-datepicker',
'backbone': 'libs/backbone/backbone.max',
'backbone-paginator': 'libs/backbone/plugins/backbone.paginator',
'backbone-validation': 'libs/backbone/plugins/backbone.validation',
'text': 'libs/requirejs/text',
'templates': '/templates/site',
'views': 'views/site',
'jquery-cookie': 'libs/jquery/plugins/jquery.cookie',
'jquery-raty': 'libs/jquery/plugins/jquery.raty.min',
'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
},
shim: {
'backbone-paginator': ['backbone'],
'bootstrap': ['jquery'],
'datepicker': ['bootstrap'],
'jquery-cookies': ['jquery'],
'jquery-raty': ['jquery'],
'jquery-slides': ['jquery'],
'backbone-validation': ['backbone']
}
});
require([
'app-site'
], function(App) {
$(function(){
App.initialize();
});
});
答案 0 :(得分:2)
我建议您声明要构建的模块,而不是使用include。通过这种方式,requirejs将模块及其所有依赖项打包在优化的bundle中。
{
baseUrl: "javascripts/",
appDir: "..",
dir: "dist",
paths: {
"main-site": 'main-site',
'jquery': 'libs/jquery/jquery',
'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
},
modules : [
{
name : 'main-site',
}
]
}
进一步考虑:
如果在任何模块define(['jquery-slides'], function() {... }
中包含jquery-slides作为依赖项,则不需要使用include指令,因为该模块的所有依赖项都将包含在优化文件中
请参阅此链接中的modules属性文档
https://github.com/jrburke/r.js/blob/master/build/example.build.js#L330
使用属性mainConfigFile
避免重复https://github.com/jrburke/r.js/blob/master/build/example.build.js#L35
祝你好运,我希望这可以帮助您