2

我对 r.js 的优化有疑问

我有一个项目有多个 requirejs 配置文件

+ app
    - module1    
        * main.js
        * foo.js
        * bar.js
    - main.js
+ build.js

每个 main.js 都有自己的包

main.js 代码是:

requirejs.config({
    'baseUrl': '../app/',
    'paths': {
        'module1' : 'module1/main'
    }
});
define(['module1'],function(){});

module1/main.js 代码如下:

requirejs.config({
    'paths': {
        'foo' : 'module1/foo',
        'bar' : 'module1/bar'
    }
});
define(['foo','bar'],function(){});

build.js 文件是这样的:

({
    mainConfigFile: 'app/main.js',
    baseUrl: 'app',
    name: 'main',
    out: 'dist/main.js',
})

当我执行$ r.js -o build.js它时返回一个错误

Tracing dependencies for: main
Error: ENOENT: no such file or directory, open 'D:\Project\Test\app\foo.js'
In module tree:
    main
      module1

Error: Error: ENOENT: no such file or directory, open 'D:\Project\Test\app\foo.js'
In module tree:
    main
      module1

    at Error (native)
4

1 回答 1

1

据我所知,在构建捆绑包时r.js根本无法处理多个调用。requirejs.config我从未见过任何与此相矛盾的文档或问题报告或工作示例。(RequireJS 将允许您requirejs.config多次调用,并结合在运行时传递的配置,但这与r.js处理多次调用requirejs.config.

您必须将您的所有呼叫组合requirejs.config成一个您指向的r.js呼叫mainConfigFile

我已经在我的机器上重新创建了您的设置,并得到了与您相同的错误。如果我将配置修改为app/main.js以下内容,则可以构建捆绑包:

requirejs.config({
    'baseUrl': '../app/',
    'paths': {
        'module1' : 'module1/main',
        'foo' : 'module1/foo',
        'bar' : 'module1/bar'
    }
});

只是为了好玩,我还尝试了以下不起作用的方法:

requirejs.config({
    'baseUrl': '../app/',
    'paths': {
        'module1' : 'module1/main'
    }
});
requirejs.config({
    'paths': {
        'foo' : 'module1/foo',
        'bar' : 'module1/bar'
    }
});

(另请注意,baseUrl在上面可以简化为,.而不是../app/。)

于 2016-07-12T11:23:05.937 回答