我开发了一个iPad / iPhone App网络应用程序。两者都分享了一些资源。现在我想构建一个看起来像这样的bootstrap js:
requirejs(['app'], function(app) {
app.start();
});
app
资源应为ipadApp.js
或iphoneApp.js
。所以我为优化器创建了以下构建文件:
{
"appDir": "../develop",
"baseUrl": "./javascripts",
"dir": "../public",
"modules": [
{
"name": "bootstrap",
"out": "bootstrap-ipad.js",
"override": {
"paths": {
"app": "ipadApp"
}
}
},
{
"name": "bootstrap",
"out": "bootstrap-iphone.js",
"override": {
"paths": {
"app": "iphoneApp"
}
}
}
]
}
但这似乎不起作用。它仅适用于一个模块,但不适用于具有不同输出的相同模块。
我想到的唯一其他解决方案是4个构建文件,看起来有点奇怪。那么有一个解决方案,我只需要一个构建文件吗?
答案 0 :(得分:1)
AFAIK r.js 优化器只能输出一次具有给定名称的模块 - 在您尝试生成名为bootstrap
的模块两次的情况下。 require.js,@ jrburke的作者就相关问题here发表了以下评论:
...现在你需要为每个被定位的脚本生成一个单独的构建命令,因为name属性对于每个脚本都是“almond.js”。
他还建议:
...如果您只想运行一个构建文件,则可以创建一个节点程序并在一个脚本文件中多次驱动优化程序。 This example显示使用requirejs作为模块并调用requirejs.optimize()。
我在我的一个项目中采用了类似的方法 - 我将build.js
文件作为ERB模板并创建了Thor任务,该任务遍历我的模块并运行 r.js 强>每一次一次。但@ jrburke使用 node.js 的解决方案更清晰。