如何构建我的RequireJS项目以便对其进行优化?

时间:2014-08-16 20:34:39

标签: javascript requirejs amd r.js

正如标题所说,我正在尝试设置我的项目,以便优化器可以在其上运行。

我希望支持multi-page shim style configuration。那就是:一个通用脚本,带有将在运行时动态加载的兄弟脚本。

我的项目还利用通过bower安装的依赖项,这些依赖项设置为进入vendor目录。还有一个node_modules目录,虽然它不包含客户端的任何内容,但应完全忽略。

这是我到目前为止的结构:

/
    node_modules/
    vendor/
    some-code/
        a-script.js
    more-code/
        another-script.js
    common.js
    main.js
    runtime.js
    build.js

由于此过程,我真正想要的是我的构建目标中的两个文件,分别对应main.jsruntime.js。最初加载编译的main并且可能在运行时加载编译的runtime但只包含图表中新的依赖项。

问题&的问题:

  • 如果common.js来自vendor的{​​{1}} shims脚本有什么关于我的目录结构可能会在r.js构建过程中出现问题吗?
  • 我注意到在运行r.js时,它会尝试缩小node_modules中的所有内容,这是错误的,因为我不希望它触及node_modules中的任何内容。
  • r.js似乎也在缩小vendor中似乎错误的一切。它不应该组装所有文件,然后在不触及vendor目录中的原件的情况下缩小它们吗?
  • 构建之后,我的dist目录最终包含我的完整项目和目录结构的完整副本,所有.js文件都缩小了。我的印象是它包含的所有内容最多只有两个.js文件,所有内联内容?这可能吗?

这是我的build.js / build.json文件:

{

    "mainConfigFile": "common.js",
    "dir": "dist",
    "modules": [

        {
            "name": "main"
        },
        {
            "name": "runtime",
            "exclude": [
                "common"
            ]
        }

    ]

}

1 个答案:

答案 0 :(得分:0)

  • 您的目录结构看起来很好,但通常的做法是将您正在处理的所有内容放入源目录,然后构建(使用gulp或grunt)到构建目录中。

    < / LI>
  • 这是正确的行为r.js.它会将您需要的所有内容(包括节点模块)复制到单个构建文件中。这对性能更好,因为您只为所有节点模块发出单个HTTP请求而不是bajillion。它没有修改node_modules

  • 中的任何内容
  • 不,这是正确的,与上述相同。

  • 我认为选择性地构建一些文件并异步加载其余文件是不可能的。我不知道为什么你想这样做,因为它可能会导致相当大的性能影响。

顺便说一句,社区似乎正在从require.js转向browserify。您可能需要check it out