Tôi có ứng dụng Angular 2 RC7 nơi tôi sử dụng SystemJS để tải các tệp JavaScript.Góc 2: Cách báo cho SystemJS sử dụng gói?
Đây là cấu hình hiện tại của tôi cho SystemJS:
(function (global) {
System.config({
defaultExtension: 'js',
defaultJSExtensions: true,
paths: {
'npm:': 'node_modules/'
},
// Let the system loader know where to look for things
map: {
// Our app is within the app folder
app: 'app',
// Angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
// Other libraries
'rxjs': 'npm:rxjs',
'ng2-translate': 'node_modules/ng2-translate'
},
// Tell the system loader how to load when no filename and/or no extension
packages: {
app: { main: './main.js', defaultExtension: 'js' },
rxjs: { defaultExtension: 'js' },
'ng2-translate': { defaultExtension: 'js' }
}
});
})(this);
Bây giờ tôi đã tạo ra một bó gọi app.bundle.min.js
có chứa tất cả các logic ứng dụng của tôi, và một dependencies.bundle.min.js
có chứa phụ thuộc sử dụng.
Làm cách nào để yêu cầu SystemJS sử dụng các tệp này thay vì nhập tệp riêng lẻ?
Tôi đã thử thay thế này:
<script>
System.import('app').catch(function(err){
console.error(err);
});
</script>
với:
<script src="production/dependencies.bundle.min.js"></script>
<script src="production/app.bundle.min.js"></script>
trong index.html của tôi, nhưng điều đó không làm việc. Miễn là tôi giữ khối tập lệnh System.import...
bên trong index.html, ứng dụng sẽ tải nhưng sử dụng các tệp riêng lẻ thay vì các gói.
Tôi cũng đã cố gắng thay đổi này:
map: {
// Our app is within the app folder
app: 'production/app.bundle.min.js',
nhưng điều đó không làm việc, hoặc.
Đây là cách các bó được tạo bằng Gulp:
gulp.task('inline-templates', function() {
return gulp.src('app/**/*.ts')
.pipe(inlineNg2Template({
UseRelativePaths: true,
indent: 0,
removeLineBreaks: true
}))
.pipe(tsc({
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true
}))
.pipe(gulp.dest('dist'));
});
gulp.task('bundle-app', ['inline-templates'], function() {
var builder = new systemjsBuilder('', 'app/configs/systemjs.config.js');
return builder
.bundle('dist/**/* - [@angular/**/*.js] - [rxjs/**/*.js]', 'production/app.bundle.min.js', {
minify: true,
mangle: true
})
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
});
gulp.task('bundle-dependencies', ['inline-templates'], function() {
var builder = new systemjsBuilder('', 'app/configs/systemjs.config.js');
return builder
.bundle('dist/**/*.js - [dist/**/*.js]', 'production/dependencies.bundle.min.js', {
minify: true,
mangle: true
})
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
});
gulp.task('production', ['bundle-app', 'bundle-dependencies'], function(){});
tôi nghi ngờ tôi phải bằng cách nào đó thay đổi ánh xạ bên trong cấu hình SystemJS của tôi chỉ về phía bó? Làm thế nào để tôi làm điều này?
Khó có thể nói mà không biết chính xác có bao gói được tạo – artem
Tôi đã thêm nhiệm vụ ngụm cho câu hỏi của tôi. –