我正在尝试使用 requirejs 的 grunt 插件组合文件:
https://www.npmjs.org/package/grunt-contrib-requirejs
这是配置:
requirejs:
compile:
options:
#appDir: './'
baseUrl: "client"
mainConfigFile: "client/test1.js"
name: "test1"
out: "build/test.js"
onModuleBundleComplete: (data) ->
outputFile = data.path
fs.writeFileSync(outputFile, amdclean.clean(
'filePath': outputFile
))
wrap:
start: ""
end: ""
这是输入和输出javascript
输入:test1.js
var x = console;
require(['test2'], function() {
return console.log('Hello');
});
test2.js
x.log('this is test2');
测试.js
var test2, test1;
x.log("this is test2"), null, test2 = undefined;
var x;
x = console, function () {
return console.log("Hello")
}(), test1 = undefined;
该程序在使用 requirejs 加载到浏览器中时运行良好。但是构建完成后,它不起作用。这是因为在x=console
使用 requirejs 加载模块时,在加载 test2.js 中的代码之前提供了定义。
但是,在构建之后,在x=console
加载来自 test2.js 的代码之后会出现定义——这会产生一个错误——因为 test2.js 调用了 x ,它是两个 js 文件之间的全局变量。
我需要确保 requirejs 将项目构建到单个 .js 文件中,同时确保不存在 amd 代码(require/define),并且代码的执行顺序与在浏览器中加载 requirejs 的顺序完全相同。