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

Javascript 使用RequireJS优化后需要优化的模块,javascript,node.js,optimization,requirejs,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

在启动服务器时,我试图利用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);
有人能提供一些关于第一个脚本无法运行的原因的见解吗

谢谢,
Jake

您在
requirejs.config
中的
baseUrl
路径错误。我还在优化器配置中添加了
removeCombined
,以防止加载已组合到
main
中的文件

然而,这并不是所需要的全部。您可以看到,我还将
requirejs.config
中的值保存在
r
中,然后使用该
r
加载模块。如果使用RequireJS,您也会这样做:您会为每个上下文保存
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);
});

您在
requirejs.config
中的
baseUrl
路径错误。我还在优化器配置中添加了
removeCombined
,以防止加载已组合到
main
中的文件

然而,这并不是所需要的全部。您可以看到,我还将
requirejs.config
中的值保存在
r
中,然后使用该
r
加载模块。如果使用RequireJS,您也会这样做:您会为每个上下文保存
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);
});