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

Javascript 我如何构造我的RequireJS项目,以便对其进行优化?,javascript,requirejs,amd,r.js,Javascript,Requirejs,Amd,R.js,正如标题所说,我目前正在尝试设置我的项目,以便优化器可以在其上运行 我希望能支持一个公司。也就是说:一个公共脚本,具有将在运行时动态加载的兄弟脚本 我的项目还利用了通过bower安装的依赖项,这些依赖项设置为进入供应商目录。还有一个节点\u modules目录,尽管它不包含客户端的任何内容,应该完全忽略 以下是我到目前为止的结构: / node_modules/ vendor/ some-code/ a-script.js more-code/

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

我希望能支持一个公司。也就是说:一个公共脚本,具有将在运行时动态加载的兄弟脚本

我的项目还利用了通过bower安装的依赖项,这些依赖项设置为进入
供应商
目录。还有一个
节点\u modules
目录,尽管它不包含客户端的任何内容,应该完全忽略

以下是我到目前为止的结构:

/
    node_modules/
    vendor/
    some-code/
        a-script.js
    more-code/
        another-script.js
    common.js
    main.js
    runtime.js
    build.js
作为这个过程的结果,我真正想要的是构建目标中的两个文件,分别对应于
main.js
runtime.js
。其中编译后的
main
将首先加载,而编译后的
运行时
可能会在运行时加载,但只包含图形中新的依赖项

问题和议题:

  • 如果我的
    common.js
    使用了
    vendor
    的脚本,那么在r.js构建过程中,我的目录结构是否存在任何问题
  • 我注意到,当运行r.js时,它试图缩小
    节点单元
    中的所有内容,这是错误的,因为我不希望它触及
    节点单元
    中的任何内容
  • r、 js似乎也在缩小
    vendor
    中的所有内容,这似乎是错误的。它不应该在不接触
    供应商
    目录中的原始文件的情况下,组装所有文件,然后缩小它们吗
  • 在构建之后,我的
    dist
    目录最终包含我的完整项目和目录结构的完整副本,所有.js文件都缩小了。我的印象是,它最多只能包含两个.js文件,所有内容都是内联的?这可能吗
这是我的
build.js
/
build.json
文件:

{

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

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

    ]

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

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

  • 不,没错,和上面一样

  • 我不认为有选择地构建一些文件并异步加载其余文件是可能的。我不知道你为什么要这么做,因为这可能会造成相当大的性能打击


顺便说一句,社区似乎正在从require.js转向browserify。你可能会想。

我现在不能说所有这些,但是——如果
r.js
设置正确,它会将所有内容写入一个新目录。因此,是的,它会将所有文件转换为
modules
目录,并合并成一个大文件。它应该只在一个构建目录中执行,而不是在主目录中。它并不是将其复制到单个构建文件中。它正在复制整个目录结构。以及单个构建文件。因此正在创建
dist/some code/a-script.js
。是这样吗?您可以有选择地构建一些文件并异步其余的文件。您只需设置一个“虚拟”模块,其中包含您希望预加载的模块,然后将该脚本包含在文档中。它将异步任何不在那里的东西。但它似乎已经同时完成了这两件事。它既构建了
dist/common.js
又构建了
dist/some-code/a-script.js
,尽管比方说,
common.js
已经将
some-code/a-script.js
定义为依赖项。。。