Опитвам се да комбинирам файлове с помощта на плъгина 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, зареден в браузъра.