是否有任何功能可以根据当前项目环境(例如开发或生产)加载不同的文件?我的意思是,这有助于我透明地加载缩小或完整的文件。我读到了关于多版本加载的内容,但是多版本化意味着我需要指定文件的版本。
例如我的模块中有module.js文件。在这个文件中我需要加载jQuery:
require(['jquery]);
但我有jQuery的缩小版和完整版,我想加载不同的文件。我在config中想到这样的事情:
require.config({
paths: {
'jquery' : function(){
if( MODE == 'DEV' ){
return 'jquery';
}else{
return 'jquery.min'
}
}
}
});
或者,也许,类似的东西。
答案 0 :(得分:2)
如果您使用the r.js optimizer,则可以为您处理此过程。在您的scripts
文件夹中,将所有模块,库和其他代码保留为解压缩目的。我经常有类似的东西
scripts/
lib/
modules/
准备部署时,创建build.js
并配置各种选项。我将举例说明我使用过的类似配置:
({
baseUrl: '../scripts',
dir: '../scripts.min',
paths: {
'jquery': 'lib/jquery'
},
removeCombined: true,
optimize: 'uglify',
preserveLicenseComments: false,
uglify: {
max_line_length: 3500,
no_copyright: true
},
modules: [
{
name: 'module1'
},
{
name: 'module2',
exclude: ['jquery']
}
]
})
有关这两个选项can be found in this example configuration的详细信息,但我会提请注意dir
和removeCombined
dir
显然是您的脚本结束的地方。我倾向于在我的脚本旁边创建一个带有后缀.min
或类似内容的文件夹。然后,当您准备投入生产时,只需将您的需求配置baseUrl
更改为scripts.min
require.config({
baseUrl: '/scripts.min' // Now the site will load scripts from the optimised folder
// Other options
})
默认情况下,r.js将复制所有脚本,无论它们是否已经合并到另一个js文件中。将removeCombined
设置为true
可确保您的scripts.min
文件夹仅包含生产所需的文件。
答案 1 :(得分:1)
如果有人仍想知道如何做到这一点:
require.config({
paths: {
'jquery' : (function(){
if( MODE == 'DEV' ){
return 'jquery';
}else{
return 'jquery.min'
}
})()
}
});
此函数是自调用匿名函数。它会在定义位置立即调用。