สิ่งสำคัญที่ต้องเข้าใจในระดับนี้คือการใช้การกำหนดค่าต่อไปนี้คุณไม่สามารถเชื่อมต่อไฟล์ JS ที่คอมไพล์ได้โดยตรง
ที่คอนฟิกูเรชันคอมไพเลอร์ TypeScript:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"declaration": false,
"stripInternal": true,
"module": "system",
"moduleResolution": "node",
"noEmitOnError": false,
"rootDir": ".",
"inlineSourceMap": true,
"inlineSources": true,
"target": "es5"
},
"exclude": [
"node_modules"
]
}
ใน HTML
System.config({
packages: {
app: {
defaultExtension: 'js',
format: 'register'
}
}
});
ตามความเป็นจริงไฟล์ JS เหล่านี้จะมีโมดูลที่ไม่ระบุชื่อ โมดูลที่ไม่ระบุชื่อคือไฟล์ JS ที่ใช้System.register
แต่ไม่มีชื่อโมดูลเป็นพารามิเตอร์แรก นี่คือสิ่งที่คอมไพลเลอร์ typescript สร้างขึ้นโดยค่าเริ่มต้นเมื่อกำหนดค่า systemjs เป็นตัวจัดการโมดูล
ดังนั้นเพื่อให้โมดูลทั้งหมดของคุณเป็นไฟล์ JS เดียวคุณต้องใช้ประโยชน์จากoutFile
คุณสมบัติภายในคอนฟิกูเรชันคอมไพเลอร์ TypeScript ของคุณ
คุณสามารถใช้สิ่งต่อไปนี้ภายในอึกเพื่อทำสิ่งนั้น:
const gulp = require('gulp');
const ts = require('gulp-typescript');
var tsProject = ts.createProject('tsconfig.json', {
typescript: require('typescript'),
outFile: 'app.js'
});
gulp.task('tscompile', function () {
var tsResult = gulp.src('./app/**/*.ts')
.pipe(ts(tsProject));
return tsResult.js.pipe(gulp.dest('./dist'));
});
สิ่งนี้สามารถใช้ร่วมกับการประมวลผลอื่น ๆ :
- เพื่ออัปเกรดไฟล์ TypeScript ที่คอมไพล์แล้ว
- เพื่อสร้าง
app.js
ไฟล์
- เพื่อสร้าง
vendor.js
ไฟล์สำหรับไลบรารีของบุคคลที่สาม
- เพื่อสร้าง
boot.js
ไฟล์เพื่อนำเข้าโมดูลที่บูตแอปพลิเคชัน ต้องรวมไฟล์นี้ไว้ที่ส่วนท้ายของหน้า (เมื่อโหลดหน้าทั้งหมดแล้ว)
- เพื่ออัปเดตโดย
index.html
คำนึงถึงสองไฟล์นี้
การอ้างอิงต่อไปนี้ใช้ในงานอึก:
- อึก - ต่อกัน
- gulp-html- แทนที่
- อึกชนิด
- อึก - อัปลักษณ์
ต่อไปนี้เป็นตัวอย่างเพื่อนำไปปรับใช้
สร้างapp.min.js
ไฟล์
gulp.task('app-bundle', function () {
var tsProject = ts.createProject('tsconfig.json', {
typescript: require('typescript'),
outFile: 'app.js'
});
var tsResult = gulp.src('app/**/*.ts')
.pipe(ts(tsProject));
return tsResult.js.pipe(concat('app.min.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist'));
});
สร้างvendors.min.js
ไฟล์
gulp.task('vendor-bundle', function() {
gulp.src([
'node_modules/es6-shim/es6-shim.min.js',
'node_modules/systemjs/dist/system-polyfills.js',
'node_modules/angular2/bundles/angular2-polyfills.js',
'node_modules/systemjs/dist/system.src.js',
'node_modules/rxjs/bundles/Rx.js',
'node_modules/angular2/bundles/angular2.dev.js',
'node_modules/angular2/bundles/http.dev.js'
])
.pipe(concat('vendors.min.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist'));
});
สร้างboot.min.js
ไฟล์
gulp.task('boot-bundle', function() {
gulp.src('config.prod.js')
.pipe(concat('boot.min.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist'));
});
config.prod.js
ก็มีดังต่อไปนี้:
System.import('boot')
.then(null, console.error.bind(console));
อัปเดตindex.html
ไฟล์
gulp.task('html', function() {
gulp.src('index.html')
.pipe(htmlreplace({
'vendor': 'vendors.min.js',
'app': 'app.min.js',
'boot': 'boot.min.js'
}))
.pipe(gulp.dest('dist'));
});
index.html
ลักษณะเช่นต่อไปนี้:
<html>
<head>
<!-- Some CSS -->
<!-- build:vendor -->
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>
<!-- endbuild -->
<!-- build:app -->
<script src="config.js"></script>
<!-- endbuild -->
</head>
<body>
<my-app>Loading...</my-app>
<!-- build:boot -->
<!-- endbuild -->
</body>
</html>
สังเกตว่าSystem.import('boot');
ต้องทำที่ส่วนท้ายของเนื้อหาเพื่อรอให้ส่วนประกอบแอปทั้งหมดของคุณได้รับการลงทะเบียนจากapp.min.js
ไฟล์
ฉันไม่ได้อธิบายถึงวิธีจัดการการลดขนาด CSS และ HTML ที่นี่