在这篇文章中,将探讨如何将一个名为“Extreme Results”的Angular1.x应用程序升级到Angular 2。这个升级过程涉及到将应用迁移到TypeScript,这是Angular团队推荐的升级步骤之一。所有相关的代码都可以在GitHub仓库中找到:https://github.com/bjaanes/ExtremeResults-WebApp。
在开始升级之前,需要确保开发环境、分发构建和单元测试都能在迁移后正常工作。这意味着:
首先,将所有的JavaScript文件(*.js)重命名为TypeScript文件(*.ts)。这一步相对简单,因为TypeScript是JavaScript的超集。目前,只是改变了文件扩展名,还没有真正使用TypeScript的功能。如果在编译过程中遇到错误,可以暂时忽略,将在后续步骤中解决这些问题。
接下来,需要将TypeScript文件集成到现有的构建过程中。这包括使用gulp插件gulp-typescript来编译TypeScript文件为JavaScript文件。
npm install --save-dev typescript gulp-typescript
然后,添加gulp任务来执行编译:
gulp.task('typescript', ['clean'], function() {
return gulp.src('src/app/**/*.ts')
.pipe(typescript({
target: 'es5'
}))
.js
.pipe(gulp.dest('tmp/typescript'));
});
这将编译所有的.ts文件为JavaScript文件(特别是ES5,以确保在所有浏览器上都能工作),并将它们保存到‘tmp/typescript’目录下。然后,需要配置gulp任务,在捆绑任务之前运行这个编译任务。
为了使捆绑任务能够正常工作,需要更新捆绑配置文件,使其查找编译后的文件而不是原始的JavaScript文件。
scripts: [
'./tmp/typescript/app.js',
'./tmp/typescript/**/*.module.js',
'./tmp/typescript/**/*.js',
],
这样,开发和分发构建就可以正常工作了。如果不使用捆绑,可能需要调整这个过程以适应构建过程。
为了使单元测试能够运行,需要将karma指向编译后的文件,而不是原始的JavaScript文件。这意味着在运行测试之前,需要先构建项目。
files: [
...,
'tmp/typescript/**/*.module.js',
'tmp/typescript/**/*.js',
]
现在,测试将加载编译后的文件,并像预期的那样运行。