使用require.js从一个引导程序文件创建不同的版本

时间:2012-07-09 07:34:38

标签: optimization build requirejs

我开发了一个iPad / iPhone App网络应用程序。两者都分享了一些资源。现在我想构建一个看起来像这样的bootstrap js:

requirejs(['app'], function(app) {
 app.start();
});

app资源应为ipadApp.jsiphoneApp.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个构建文件,看起来有点奇怪。那么有一个解决方案,我只需要一个构建文件吗?

1 个答案:

答案 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 的解决方案更清晰。