如何为Angular 2设置gulp-typescript?

时间:2015-10-01 20:33:02

标签: javascript typescript gulp ecmascript-6 angular

目前我正在使用带有watch标志的tsc编译器。它运行良好,加载所有定义文件并正确编译每个angular2文件。但是通过shell窗口使用会非常不舒服。

我的目标是创建一个gulp任务,可以根据angular2定义翻译任何打字稿文件。我参与gulp-typescript,似乎很容易使用,所以这就是代码:

var tsProject = $.typescript.createProject(paths.src + '/tsconfig.json');
gulp.task('typescript', function() {
  gulp
    .src([
      paths.src + '/*.ts'
    ])
    .pipe($.typescript(tsProject)).js
    .pipe(gulp.dest(paths.tmp));
});

这是文件夹结构:

...
src/
---- app/
-------- ts/
------------ *.ts
---- typings/
-------- angular2/
------------ angular2.d.ts
------------ http.d.ts
-------- es6-promise/
------------ ...
-------- rx/
------------ ...
-------- tsd.d.ts
---- *.ts
---- tsconfig.json
gulpfile.js
...

tsconfig文件没有files列表,因此编译器应检查src内(任何级别)的任何ts文件。

调用任务时,我收到以下错误:

error TS2307: Cannot find module 'angular2/angular2'.
error TS2307: Cannot find module 'angular2/http'.

如何告诉typescript编译器使用哪些d.ts个文件?

3 个答案:

答案 0 :(得分:3)

看起来您尚未在文件中声明amd-reference

尝试在您导入模块的文件中声明:

/// <amd-dependency path="./src/typings/angular2/angular2.d.ts" />
/// <amd-dependency path="./src/typings/angular2/http.d.ts" />

import angular2 = require("angular2");
import http = require("http")

/// <amd-dependency告诉编译器系统中存在特殊模块,并且可以无错误地编译

答案 1 :(得分:1)

我建议在gulp.src中添加定义。像这样:

var tsProject = $.typescript.createProject(paths.src + '/tsconfig.json');
gulp.task('typescript', function() {
  gulp
    .src([
      paths.src + '/app/**/*.ts',
      paths.src + '/typings/**/*.d.ts'
    ])
    .pipe($.typescript(tsProject)).js
    .pipe(gulp.dest(paths.tmp));
});

答案 2 :(得分:0)

这也让我诅咒和咒骂了一会儿。确保在tsconfig.json的compilerOptions节点中有这个:

{
  "compilerOptions": {
    "moduleResolution": "node",
  }
}