Javascript 使用RequireJS优化后需要优化的模块
在启动服务器时,我试图利用RequireJS优化器将所有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
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);
});