【发布时间】:2016-11-07 21:42:51
【问题描述】:
我正在尝试根据Johnpapa's Angular Style Guide 设置一个 angularjs 项目,同时使用 TypeScript 和 Gulp 作为构建工具。我相信 Gulp 目前比 Grunt 更受推荐,但我对 Gulp 不是很有经验。
我有什么:
我的项目目前是这样的:
src/
+- ts/ # contains .ts source files
+- typings/ # contains .d.ts typing definitions
+- html/ # contains .html files
dist/
+- bundle.js # single .js file containing compiled typescript and sourcemaps
按照角度样式指南,我为每个角度元素创建了一个单独的.ts 文件。
my-app.module.ts
----------------
angular.module('myApp', []);
用于模块的初始化,另一个用于控制器的简单实现:
my-controller.controller.ts
----------------------------
export class MyController {
testString = 'test';
}
angular
.module('myApp')
.controller('MyController', MyController);
typescript 使用简单的tsconfig.json 进行配置。 (请注意,filesGlob 尚未激活——它将在 TypeScript 2.0 中可用)
tsconfig.json
-------------
{
"exclude" : [
"node_modules"
],
"filesGlob" : [
"./src/typings/index.d.ts",
"./src/ts/**/*.ts",
"!./node_modules/**/*.ts"
],
"compilerOptions": {
"noImplicitAny": true,
"target": "es5",
"sourceMap" : true,
"outFile" : "./dist/bundle.js",
"removeComments": false
}
}
我想要什么:
我希望
- 让 Gulp 监视
./src/ts/**/*.ts中新的或更新的.ts文件 - 连接来自
./src/ts/**/*.ts的所有文件。这是 angular 正常工作所必需的。我尝试使用 requirejs 或 browserify 的其他方法无法找到其他 .ts 文件,而无需手动输入对这些文件的引用。 - 使用来自
tsconfig.json的定义进行编译。这将考虑到./src/typings/index.d.ts中的类型(对于包括“角度”的外部模块)。还有源图。 - 可能需要一个 uglify 或 babelify 步骤来完成它。
我尝试了什么:
我尝试按照 typescriptlang handbook 中的手册进行操作,但这使用的是 browserify 并且不适用于 angular。
Gulp-typescript 也有关于 concatenating files 的注释,但 out 选项不能像这样工作:
var gulp = require('gulp');
var ts = require('gulp-typescript');
var tsProject = ts.createProject('tsconfig.json');
gulp.task('default', function () {
var tsResult = tsProject.src().pipe(ts(tsProject));
return tsResult.js.pipe(gulp.dest('dist'));
});
此配置将输出一个只有 cmets 的空文件。
this question中提到的另一种方法:
gulp.task('ts', function () {
gulp.src('./src/ts/**/*.ts')
.pipe(ts({
noImplicitAny: true,
out: 'output.js'
}))
.pipe(gulp.dest('./tmp/ts'));
});
gulp.task('default', ['ts'], function() {
gulp.src(['./tmp/ts/output.js'])
.pipe(sourcemaps.init())
.pipe(uglify())
.pipe(sourcemaps.write('/'))
.pipe(gulp.dest('./dist/'));
});
但这带来了两个问题:1. 即使我只指向./src/ts 中的.ts 文件,打字稿编译器开始从./node_modules 中的.ts 中喷出错误。 2. 还是没能把所有东西串联起来。
我在这里很茫然。谁能帮我设置这个构建脚本?我很惊讶在任何地方都找不到类似的工作演示。
解决方案:
我已经根据this answer 中的解决方案配置了 gulp 环境,并删除了不在 typescript 模块内的类/对象的“export”语句。
【问题讨论】:
标签: angularjs typescript gulp gulp-typescript