Javascript 并行下载脚本依赖项RequireJS 下面,我尝试为所有供应商JS资产(如jQuery和Buffery)提供一个文件,同时在其他模块中加载页面特定代码。
虽然我可以成功地构建js并将其复制到Javascript 并行下载脚本依赖项RequireJS 下面,我尝试为所有供应商JS资产(如jQuery和Buffery)提供一个文件,同时在其他模块中加载页面特定代码。,javascript,requirejs,Javascript,Requirejs,虽然我可以成功地构建js并将其复制到build文件夹中(使用grunt requirejs Optimizer),但是require.config中的baseUrl现在显然是错误的 baseUrl:'js'指向public/js而不是public/build/js,因此所有路径都不正确 运行Optimizer时,是否有方法动态更新baseUrl?所以它指向public/build/js 这是我的艰巨任务: requirejs: { dist: { options: {
build
文件夹中(使用grunt requirejs Optimizer),但是require.config
中的baseUrl现在显然是错误的
baseUrl:'js'
指向public/js
而不是public/build/js
,因此所有路径都不正确
运行Optimizer时,是否有方法动态更新baseUrl
?所以它指向public/build/js
这是我的艰巨任务:
requirejs: {
dist: {
options: {
baseUrl: '<%=pkg.paths.js%>',
dir:'project/public/build/js',
mainConfigFile: '<%=pkg.paths.js%>main.js',
optimize: 'none',
removeCombined: true,
uglify2: {
no_mangle: true,
compress: {
drop_console: true
}
},
modules: [
{
name: 'vendorCommon'
},
{
name: 'dashboard',
exclude: ['vendorCommon']
}
]
}
}
}
需要配置
require.config({
baseUrl: '/js',
priority: ['vendorCommon'],
paths: {
'vendorCommon':'vendor/vendor-common',
'jquery':'../bower_components/jquery/dist/jquery.min',
'foundation':'../bower_components/foundation/js/foundation/foundation',
'dashboard':'views/dashboard'
},
shim: {
'foundation': ['jquery']
}
});
我已经使用了优化器的设置来修改优化后的一些模块。如果您的配置包含在优化包中,那么您可以使用onBuildWrite
对其进行修补:
onBuildWrite: function (moduleName, path, contents) {
if (moduleName === '<%=pkg.paths.js%>main') {
return contents.replace("baseUrl: '/js'", "baseUrl: '/build/js'");
}
return contents;
}
onBuildWrite:function(模块名、路径、内容){
if(moduleName==='main'){
返回contents.replace(“baseUrl:'/js',“baseUrl:'/build/js'”);
}
返回内容;
}
免责声明:我把这写在我的头上。当心打字错误
另一种可能是在运行时重写
baseUrl
。RequireJS能够将多个配置组合成一个配置。在以后的调用中,新值baseUrl
将覆盖以前的值。因此,如果您有办法设置应用程序的优化版本(例如,通过服务器提供的不同HTML)来调用require.config({baseUrl:'/build/js'})
在问题中显示的调用之后,但在需要正确的baseUrl的任何代码之前,这也可以是一个选项。我曾考虑为生产创建单独的配置,但对我来说,onBuildWrite是一个更好的解决方案。谢谢
onBuildWrite: function (moduleName, path, contents) {
if (moduleName === '<%=pkg.paths.js%>main') {
return contents.replace("baseUrl: '/js'", "baseUrl: '/build/js'");
}
return contents;
}