node.js - Hur man laddar en bundlad fil i systemimport i Angular 2 med Gulp: Fel: Flera anonyma System.register-anrop i modul
Jag har en Angular 2-applikation med TypeScript som genererar js-filer.
Nyligen installerade jag npm och gulp och skrev uppgifter för att bunta alla js-filer till en enda, nu hur laddar man den filen?
Tidigare i min index.html-sida: //vilket fungerar där main är komponenten som startar appComponent
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js',
defaultJSExtensions: true
}
}
});
debugger;
//System.import('Scripts/main')
System.import('app/V1/components/main')
.then(null, console.error.bind(console));
</script>
Min Gulp-uppgift:
var config = {
src: ['app/**/*.js'],
dest: ['Scripts/']
};
gulp.task('bundle', function () {
console.log('testing');
return gulp.src(config.src)
.pipe(uglify())
.pipe(concat('all.min.js'))
.pipe(gulp.dest('app/'));
})
När jag kör denna gulp-uppgift genererar den all.min.js men hur använder man detta nu, det vill säga hur tar man bort main.js i System.import och laddar detta
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js',
defaultJSExtensions: true
}
},
map: {
immutable: 'app/all.min.js'
}
});
debugger;
//System.import('Scripts/main')
System.import('app/all.min')
.then(null, console.error.bind(console));
</script>
Jag försökte på detta sätt som ger fel som
Fel: Flera anonyma System.register-anrop i modul http://localhost:55308/app/all.min.js. Om du laddar ett paket, se till att alla System.register-anrop är namngivna.
Svar #1
Jag tror att det finns en bättre lösning för att bunta filer för användning med system.js. Det finns ett praktiskt bibliotek som heter systemjs-builder. Du kan enkelt använda det med gulp.
Först behöver du extrahera ditt system.js-skript till en separat fil. Sedan kan du använda denna uppgift för att generera den sammanfogade js.
gulp.task('system', () => {
var builder = new systemBuilder();
return builder.loadConfig('./system.config.js') // Name of your system js file
.then(() => builder.buildStatic('app', 'total.js'))
});
Nu har du de sammanfogade filerna samt system.js-konfigurationen som behövs för att köra dem, allt borde fungera bra vid det här laget. Du kommer dock att behöva använda ett separat bibliotek för att uglifya js. gulp-uglify borde fungera bra.
Här är ett exempeluppdrag:
gulp.task('build', ['system'], () => {
return gulp.src([
'node_modules/core-js/client/shim.min.js',
'node_modules/zone.js/dist/zone.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js',
'total.js'
])
.pipe(concat('main.js'))
.pipe(uglify())
.pipe(gulp.dest('./'))
});
Nu, om du kör gulp build och inkluderar den genererade main.js i din index.html (och tar bort alla andra skript), bör allt fungera.
