Javascript 如果我们在配置中定义了一些映射,如何使用requireJS优化项目?
我的main中有一个require.config,如下所示 require.config({Javascript 如果我们在配置中定义了一些映射,如何使用requireJS优化项目?,javascript,optimization,module,requirejs,Javascript,Optimization,Module,Requirejs,我的main中有一个require.config,如下所示 require.config({ baseUrl:'scripts/' paths:{ jquery:'shell/lib/jquery/jquery-1.7.1' // many libraries and modules are aliased here }, map:{ '*':{ 'underscore':'shell/lib/underscore/underscore'
baseUrl:'scripts/'
paths:{
jquery:'shell/lib/jquery/jquery-1.7.1'
// many libraries and modules are aliased here
},
map:{
'*':{
'underscore':'shell/lib/underscore/underscore'
// a few other modules are mapped here
}
}
}))
我这样做是因为map中定义的文件使用内部依赖关系(在各自的文件夹中)和相对路径。
现在,当我运行optimizer时,路径中定义的模块被保存为模块ID,就像jquery保存为jquery一样,而映射中的模块则获得完整的路径,比如“下划线”被保存为“shell/lib/下划线/下划线”,而不是“下划线”
这会导致问题,因为我在其他模块中也使用了“下划线”,而优化后的文件使用的是“下划线”而不是“shell/lib/下划线/下划线”
当我们提供地图配置或我缺少的东西时,是否有一些具体的优化方法?请告诉我怎么修
谢谢我不确定是否理解这个问题: 这会导致问题,因为我在其他模块中也使用了“下划线”,而优化后的文件使用的是“下划线”而不是“shell/lib/下划线/下划线” 这似乎是预期的行为,您将所有模块的
下划线
映射到该路径。因此,基本上你是在告诉r.js
:每次你找到下划线
依赖项时,把它重写为shell/lib/下划线/下划线
。如果您的模块使用“内部路径”,并且您希望执行相反的操作(使它们引用下划线
),则需要执行相反的映射:
'some/path/underscore': 'underscore'
在这种情况下,所有模块都将指向同一个下划线模块。甚至那些使用一些奇怪路径作为下划线的
在极端情况下,您需要控制r.js
如何在磁盘上写入模块。您可以使用onBuildWrite
属性(请参阅)
例如:
onBuildWrite: function ( moduleName, path, contents ) {
if ( path === './src/somefile.js' ) {
return contents.replace(/^define\('src\/underscore'/, "define('underscore'");
} else {
return contents;
}
}
这个例子是一个告诉
r.js
的“黑客”:当你处理somefile.js
时,用下划线替换src/下划线
(这正是你对map所做的…但只是告诉你如何使用onBuildWrite
来做讨厌的事情).不太清楚为什么要在地图中添加下划线。当应用程序中的不同模块依赖于不同版本的下划线时,映射非常有用。如果所有应用程序都依赖于一个版本的下划线,请将其放在输入路径中。请在评论中澄清,我会尽力帮助您。此下划线是一个包装器.js文件,写在下划线库上,上面写着require[(“/下划线-1.3.3”)…之所以这样做,是因为一个团队测试并定义了要使用的开源库,而其他团队使用它们。在编写开源库(如Animation.js)的自定义扩展时,也可以使用这种实现。提前感谢。