Angular 2 Gulp Typescript编译

时间:2016-06-15 17:32:01

标签: angular typescript gulp gulp-typescript

我一直在关注角度2打字稿demo。我现在想使用gulp使用我自己的构建管道。但是,在尝试使用我的编译gulp任务时,我收到了打字稿编译错误。这是我的项目结构

- project
  |- app
    |- app.component.ts
    |- main.ts
  |- node-modules
  |- typings
  gulpfile.js
  tsconfig.json
  package.json

这是我的gulpfile

var gulp = require('gulp');
var ts = require('gulp-typescript');

gulp.task('compile-app', function() {
    return gulp
        .src('./app/**/*.ts')
        .pipe(ts({
            noImplicitAny: true,
            out: 'output.js'
        }))
        .pipe(gulp.dest('./bin'));
});

当我尝试运行' gulp compile-app'我收到以下错误

project/node_modules/@angular/core/src/application_ref.d.ts(39,88): error TS2304: Cannot find name 'Promise'.
project/node_modules/@angular/core/src/di/reflective_provider.d.ts(105,123): error TS2304: Cannot find name 'Map'.
project/node_modules/@angular/core/src/facade/collection.d.ts(1,25): error TS2304: Cannot find name 'MapConstructor'.
etc......

我无法弄清楚发生了什么。有什么想法吗?

节点v6.2.1 npm v3.9.3 打字1.0.5

2 个答案:

答案 0 :(得分:2)

从您的gulp错误看,您似乎缺少ES6功能。如果您将.tsconfig目标属性更改为" es6"它会编译,因为Promise和Map有ES6定义。这种方法的问题是ES6仍然与大多数浏览器不兼容。为了使用这些和目标ES5,您需要es6-shim。

使用Typings~1.0及以上,您需要使用:

typings install dt~es6-shim --save --global

答案 1 :(得分:0)

我可以通过添加

来删除构建编译错误
///<reference path="../typings/index.d.ts/"/>

到应用程序的主要入口点,在本例中为main.ts,即我引导应用程序的位置。这将为打字稿提供对打字所安装的core-js打字稿定义的正确引用,即

/// <reference path="globals/core-js/index.d.ts" />

因此es6的垫片定义与es5浏览器一起使用。

注意:您无需使用最新版本的angular(2.0.0-rc.2)安装es6-shim。使用core-js。如果您添加es6-shimcore-js,则在打字稿编译期间会收到duplicate identifier错误消息。