如何将RequireJS配置放在单独的文件中并使r.js优化器工作?

时间:2013-10-03 21:49:12

标签: javascript requirejs amd r.js

大多数RequireJS设置示例,将配置对象放在main.js入口点,如下所示:

//main.js
require.config({
"paths": {
    //libs
    "lib1": "assets/js/lib/lib1",
    "lib2": "assets/js/lib/lib2",
    "lib3": "assets/js/lib/lib3",
    "lib4": "assets/js/lib/lib4"
    }
});
//start the app
define(["lib1"], function(lib1){/*start the app*/});

我更喜欢将配置对象放在一个单独的文件中,因为随着它的增长,很难在​​同一个文件中维护。

以下设置在我在浏览器中运行时有效,但出于某种原因,我在运行r.js优化器时遇到错误:

//config.js
define({/*all configuration here*/});

//main.js
define(["config", "require"], function(config, require){
    requirejs.config(config); //set configuration
    require(["app"]); //launch app, where "app" path is defined in config.js
});

当我运行r.js时,我收到以下错误:

  

*跟踪:main

的依赖关系      

错误:ENOENT,没有这样的文件或目录'C:\ Work \ project \ target \ app.js *

所以似乎r.js没有得到配置设置,因为它正在寻找app.js作为相对脚本,而不是具有定义路径的模块。

这是我的build.js文件(appDir,dir和mainConfigFile是相对于build.js文件的):

({
    appDir: "../src",
    baseUrl: ".",
    dir: "../target",
    mainConfigFile: "../src/main.js",
    findNestedDependencies: true,
    modules: [
        {
            name: "main"
        }
    ]
})

1 个答案:

答案 0 :(得分:7)

这就是我这样做的方式。我喜欢将配置文件分开,因为我在测试中重复使用它。

文件夹结构:

PROJECT
|
+- build (build output directory)
|
+- build-scripts (contains r.js, build.js)
|
+- WebContent
   |
   +- index.html (application main file)
   |
   +- scripts
      |
      +- require-cfg.js
      |
      +- main.js
      |
      +- ...

配置文件(require-cfg.js - 仅显示相关内容):

var require = {
    baseUrl: "scripts",
    paths: ...
    ...
};

构建文件(build.js):

({
    appDir: "../WebContent/",
    baseUrl: "scripts/",
    mainConfigFile: "../WebContent/scripts/require-cfg.js",
    paths: {
        /* repeated from require-cfg.js */
    },
    dir: "../build",
    optimize: "uglify2",
    inlineText: true,
    removeCombined: true,

    name: "main"
})

引导代码(index.html):

<script src="scripts/require-cfg.js"></script>
<script src="scripts/lib/require-2.0.2-jquery-1.10.2.js"></script>
<script src="scripts/main.js"></script>

我在r.js文件夹中使用build.js配置执行build-scripts。优化和组合输出转到build文件夹。您可以根据自己的需要调整路径。