如何使r.js构建脚本正常工作

时间:2014-12-11 11:31:59

标签: javascript requirejs r.js

我已经阅读了文档和示例app.build.js文件,但是无法将我的js文件连接并缩小为单个文件。我想我只是不明白我在构建脚本中需要什么设置,并希望得到一些帮助。

我的应用设置如下:

src >
    js >
        build.js
        r.js
        config.js
        app >
            main.js
        lib >
            module1.js
            module2.js
            module3.js
        vendor >
            require.js
            jquery.js
            jquery.validation.js

build >
    // Where concat and minified file would go

config.js 如下所示:

requirejs.config({
    "baseUrl" : "src/js/lib", // Used because when setting dependencies in modules, this is used
    "paths" : {
        "app" : "../app",
        "jquery" : [
            "https://code.jquery.com/jquery-1.11.1.min",
            "../vendor/jquery"
        ],
        "validate" : "../vendor/jquery.validate.min"
    },
    "shim" : {
        // Allow plugins with dependencies to load asynchronously
        validate : ["jquery"]
    }
});

// Load the main app module to start the app
requirejs(["app/main"]);

main.js 看起来像这样:

require(["module1", "module2", "module3"], function(Module1, Module2, Module3) {

    return [
        Module1.init(),
        Module2.init(),
        Module3.init(),
        Module4.init()
    ];

});

然后 build.js 就是我丢失的地方。我以为我应该加载一个mainConfigFile因为我正在使用垫片,但我不确定。如果我加载该配置文件,它将使用该配置文件中的baseUrl。我不确定name:应该准确引用什么,以及我是否缺少一些必要的配置选项。

({
    //baseUrl: ".",
    paths: {
        jquery: "empty:",
        //main: "../app/main",
        //app: "app"
    },
    name: "app/main",
    out: "../build/main.js",
    //mainConfigFile: "config"
})

如果我按原样运行该构建文件(将这些行注释掉),我得到:

  

错误:ENOENT,没有这样的文件或目录   '/Users/davidpaul/Sites/require/src/js/module1.js'在模块树中:       应用程序/主

当我说'模块树'时,我不确定它被引用了什么。我不断对构建文件中的路径进行更改,但没有取得进展,所以希望有人向我解释一下。

1 个答案:

答案 0 :(得分:0)

构建器解析相对于构建文件位置的所有路径(除非changed via the baseUrl property)。如果您看起来与src/js/build.js相关,则 main.js 位于./app/,而 module1 / 2 / 3.js 位于./lib/ }。模块内的所有路径都必须相对于公共根目录进行指定,因此要使示例正常工作,就足以将 main.js 的签名更改为:

require(["lib/module1", "lib/module2", "lib/module3"], function(M1, M2, M3) {
   // (...)
})

请注意, config.js 不会参与构建过程,您可能还需要对其进行更改,以使您的应用程序既“原始”又可以“优化”。