8

大多数 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 时,我收到以下错误:

*跟踪依赖项:主要

错误: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"
        }
    ]
})
4

1 回答 1

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.jsbuild.js配置执行。build-scripts优化和组合的输出进入build文件夹。您可以调整路径以满足您的需求。

于 2013-10-04T07:20:54.173 回答