使用RequireJS优化后需要优化模块

时间:2016-06-03 18:47:21

标签: javascript node.js optimization requirejs

启动我的服务器后,我正在尝试利用RequireJS优化器将所有RequireJS模块组合到一个文件中。优化器完成后,我正在尝试使用模块,但它似乎没有工作。

var path = require('path');
var fs = require('fs');

var requirejs = require('requirejs');

requirejs.config({
    baseUrl: __dirname,
    nodeRequire: require
});

requirejs.optimize({
    baseUrl: path.join(__dirname, 'foo'),
    dir: 'build',
    modules: [{
        name: 'main',
        include: [ 'src/bar' ]
    }]
}, function (data) {
    console.log(fs.readFileSync(path.join(__dirname, 'build', 'main.js'), 'utf-8'));
    var main = requirejs('/build/main.js'));
    var bar = requirejs('src/bar');
}, function (error) {
    console.log(error);
});

console.log的输出是预期的连接文件,但是未定义bar。

如果我在上一个脚本之后运行以下脚本,则会定义bar。

var requirejs = require('requirejs');

requirejs.config({
    baseUrl: __dirname,
    nodeRequire: require
});

var main = requirejs('/build/main.js'));
var bar = requirejs('src/bar');
console.log(bar);

任何人都可以提供有关阻止第一个脚本工作的内容的任何见解吗?

谢谢, 杰克

1 个答案:

答案 0 :(得分:0)

baseUrlrequirejs.config的路径错误。我还在优化程序配置中添加了removeCombined,以防止加载已合并到main的文件。

但是,不是所需的一切。您看到我还保存requirejs.configr的值,然后使用此r加载模块。这与使用RequireJS contexts时的操作相同:您为每个上下文保存requirejs.config调用的值,以便您可以使用一个函数从一个上下文加载内容另一个是从其他上下文加载东西。我不得不承认我不知道为什么这会使代码工作。它闻起来像个臭虫。

我发现的另一件事是requirejs.optimize吞下了在其完成回调中抛出的任何异常。这绝对是个错误。如果没有吞下异常,你就可以更好地了解发生了什么。

以下是代码:

var path = require('path');
var fs = require('fs');

var requirejs = require('requirejs');

var r = requirejs.config({
    baseUrl: path.join(__dirname, 'build'),
    nodeRequire: require
});

requirejs.optimize({
    baseUrl: path.join(__dirname, 'foo'),
    dir: 'build',
    // You should do this to make sure that you are not accidentally loading
    // files that have *not* been combined.
    removeCombined: true,
    modules: [{
        name: 'main',
        include: [ 'src/bar' ]
    }]
}, function (data) {
    // console.log(fs.readFileSync(path.join(__dirname, 'build', 'main.js'), 'utf-8'));
    var main = r('main');
    console.log(main);
    var bar = r('src/bar');
    console.log(bar);
}, function (error) {
    console.log(error);
});