1

我开发了一个 iPad/iPhone App 网络应用程序。两者共享一些资源。现在我想构建一个如下所示的引导 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 个构建文件,这似乎有点奇怪。那么有没有一种解决方案,我只需要一个构建文件?

4

1 回答 1

1

AFAIK r.js优化器只能输出一次具有给定名称的模块 - 在您的情况下,您尝试生成bootstrap两次命名的模块。require.js 的作者@jrburke 在这里对一个相关问题发表了以下评论:

...现在您需要为每个目标脚本生成一个单独的构建命令,因为每个脚本的 name 属性始终是“almond.js”。

他还建议:

...如果您只想运行一个构建文件,您可以创建一个节点程序并在一个脚本文件中多次驱动优化器。此示例显示使用 requirejs 作为模块并调用 requirejs.optimize()。

我在我的一个项目中采用了类似的方法——我将我的build.js文件制作为 ERB 模板并创建了一个贯穿我的模块并为每个模块运行一次r.js的Thor任务。但是@jrburke 使用node.js的解决方案更干净。

于 2012-07-11T13:09:39.067 回答