Я пытаюсь объединить файлы, используя плагин grunt для requirejs:
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');
test.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
предоставляется до загрузки кода в test2.js, когда модули загружаются с использованием requirejs.
Однако после сборки определение x=console
появляется после загрузки кода из test2.js, что создает ошибку, потому что test2.js вызывает x, который является глобальной переменной между двумя файлами js.
Мне нужно убедиться, что requirejs строит проект в один файл .js, при этом гарантируя отсутствие кода amd (require/define) и выполнение кода в ТОЧНОМ порядке, как при загрузке requirejs в браузере.