Search code examples
typescriptgulpangulartypescript1.8gulp-typescript

Angular2 beta and gulp-tsc - Cannot find module 'angular2/core'


I am trying to automate the typescript compilation with the new angular 2.0 beta.

The project structure is:

myapp
|--node_modules
     |---angular2
            |--core.d.ts
            |--...
|--lib
    |--resources
         |--app
             |--app.component.ts
|--typings
     |--..
.
|--package.json
|--gulpfile.js

app.component.ts excerpt:

import {Component, View} from 'angular2/core';
import {TechnologiesService} from './services';

When I run the typescript command (tsc) directly from the shell everything goes well and the javascript files are generated. However when I run my gulp compile task there are some errors because it doesn't find angular2/core and angular2/platform/browser modules. Why?

[16:35:55] Using gulpfile C:\dev\myapp\gulpfile.js
[16:35:55] Starting 'compile-ts'...
[16:35:55] Compiling TypeScript files using tsc version 1.8.2
[16:35:56] [tsc] > lib/resources/app/app.component.ts(1,46): error TS2307: Cannot find module 'angular2/core'.
[16:35:56] [tsc] > lib/resources/app/app.component.ts(44,14): error TS1219: Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning.
[16:35:56] [tsc] > lib/resources/app/main.ts(1,28): error TS2307: Cannot find module 'angular2/platform/browser'.
[16:35:56] Failed to compile TypeScript: Error: tsc command has exited with code:2

events.js:154
      throw er; // Unhandled 'error' event
      ^
 Error: Failed to compile: tsc command has exited with code:2

gulpfile typescript compilation task:

var gulp = require('gulp');
var plugins = require('gulp-load-plugins')();
var typescript = require('gulp-tsc');
gulp.task('compile-ts', function(){
  return gulp.src(['./lib/resources/app/**/*.ts'])
    .pipe(typescript({"target": "es5", "module": "system", "moduleResolution": "node", "sourceMap": true,
                      "experimentalDecorators": true, "emitDecoraasdftorMetadata": true, "removeComments": false,
                      "noImplicitAny": false}))
    .pipe(gulp.dest('./public/app/'));
});

Solution

  • I am using gulp-typescript instead of gulp-tsc and the following gulpfile.js is working perfectly with tsconfig.json file specified.

    var gulp = require('gulp');
    var ts = require('gulp-typescript');
    var path = require('path');
    var sourcemaps = require('gulp-sourcemaps');
    
    gulp.task('build:client', function () {
        var tsProject = ts.createProject('client/tsconfig.json');
        var tsResult = gulp.src([
            'client/**/*.ts',
            '!client/typings/main/**/*.ts',
            '!client/typings/main.d.ts'
        ])        
            .pipe(sourcemaps.init())
            .pipe(ts(tsProject))
        return tsResult.js
            .pipe(sourcemaps.write())
            .pipe(gulp.dest('server'))
    });
    
    gulp.task('default', ['build:client']);
    

    My tsconfig.json

    {
      "compilerOptions": {
        "target": "es5",
        "module": "system",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": false,
        "rootDir":"./"    
      },
      "exclude": [    
        "typings/main",
        "typings/main.d.ts"
      ]
    }
    

    To install Typings

    npm install typings --save-dev
    

    Initialize the typings.json

    typings init
    

    To Install Typings for "es6-collections" and "es6-promise"

    typings install es6-collections --ambient --save
    typings install es6-promise --ambient --save