javascript - 如何让 r.js 构建脚本正常工作

标签 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"]);

ma​​in.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"
})

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

Error: ENOENT, no such file or directory '/Users/davidpaul/Sites/require/src/js/module1.js' In module tree: app/main

我不太确定当它说“模块树”时指的是什么。我不断对构建文件中的路径进行更改,但没有取得进展,因此希望有人向我解释一下。

最佳答案

构建器解析相对于构建文件位置的所有路径(除非 changed via the baseUrl property )。如果您相对于 src/js/build.js 进行查找,您的 ma​​in.js 位于 ./app/module1/中2/3.js 位于 ./lib/ 中。模块内的所有路径都必须相对于公共(public)根来指定,因此为了使您的示例正常工作,只需将 ma​​in.js 的签名更改为:

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

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

关于javascript - 如何让 r.js 构建脚本正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27421864/

相关文章:

javascript - 使用一个菜单按钮添加动画和动画类

javascript - 如何在 AngularJS 中将文本渲染成 HTML

javascript - require 的同步形式在解决循环依赖时会抛出错误,除非我重命名 require

unit-testing - 使用 QUnit、Grunt 和 RequireJS 进行单元测试

javascript - 在 r.js 优化文件和 requirejs 脚本加载之间切换

javascript - 动态设置嵌套对象的属性

javascript - 为什么这个字谜函数不正确?

reactjs - 如何仅在需要时才加载React Router中的组件?

javascript - 动态设置的 Requirejs 优化器和区域设置

javascript - 可以直接包含(r.js)优化文件吗?