Angular 2 RC 7 с gulp приводит к ошибкам в js

#angular #typescript #gulp

#angular #typescript #gulp

Вопрос:

Сегодня начните использовать gulp с angular. После того, как gulp выполняет задачи по компиляции scss и ts, начинают возникать ошибки.

 posts:19 Error: Error: Can't resolve all parameters for PostsComponent:
  

Если я скомпилирую ts, выполнив эту команду, ошибок не будет.

 npm run tsc:w
  

Я потратил весь день, чтобы исправить эту проблему, но пока безрезультатно.
Я заметил, что это происходит со всеми моими сервисами.

Вот мой gulpfile.js

 'use strict';

var gulp       = require('gulp'),
    watch      = require('gulp-watch'),
    prefixer   = require('gulp-autoprefixer'),
    sass       = require('gulp-sass'),
    ts         = require('gulp-typescript'),
    sourcemaps = require('gulp-sourcemaps'),
    cssmin     = require('gulp-minify-css');

gulp.task('watch', function () {
    watch(['app/**/*.scss'], function (event, cb) {
        gulp.start('style:build');
    });

    watch(['app/**/*.ts'], function (event, cb) {
        gulp.start('ts:build');
    });
});

gulp.task('style:build', function () {
    gulp.src('app/**/*.scss', {base: "./"})
        .pipe(sass())
        .pipe(prefixer())
        .pipe(cssmin())
        .pipe(gulp.dest('.'));
});

gulp.task('ts:build', function () {
    var tsResult = gulp.src('app/**/*.ts', {base: "./"})
        .pipe(sourcemaps.init())
        .pipe(ts());

    return tsResult
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('.'));
});

gulp.task('default', ['watch']);
  

Вот мои posts.component.ts

 import { Component, OnInit } from "@angular/core"
import { PostsService }      from "./posts.service"
import { PostItem }          from "./post.item"

@Component({
    selector   : 'eva-posts',
    providers: [
        PostsService
    ],
    templateUrl: 'app/posts/posts.template.html',
    styleUrls  : [
        'app/posts/posts.component.css'
    ]
})

export class PostsComponent implements OnInit
{
    /**
     *
     */
    public list: Array = [];

    /**
     *
     * @param service
     */
    constructor(private service: PostsService)
    {

    }

    ngOnInit(): void
    {
        let component = this;
        this.service.all().then(function (items)
        {
            for (var i = 0; i < items.length; i  ) {
                component.list.push(new PostItem(items[i]));
            }
        });
    }
}
  

И posts.service.ts

 import { Injectable } from "@angular/core"
import { Http }       from "@angular/http"

import { PostItem }   from "./post.item"
import "rxjs/add/operator/toPromise"

@Injectable()
export class PostsService
{
    /**
     * Api uri
     * @type {string}
     */
    private url: string = 'https://api.tapakan.name/ru/api/posts';

    /**
     * Service constructor
     * @param http
     */
    constructor(private http: Http)
    {

    }

    /**
     *
     * @returns {Promise<PostItem[]>}
     */
    all(): Promise<PostItem[]>
    {
        return this.http.get(this.url)
                   .toPromise()
                   .then(response => response.json().data);
    }
}
  

Спасибо за любую помощь.

Ответ №1:

Я думаю, вы должны предоставить правильные параметры:

 .pipe(ts({
  ...
  emitDecoratorMetadata: true
  ...
}))
  

Или попробуйте использовать ваш tsconfig.json , как описано в документации.

https://github.com/ivogabe/gulp-typescript#using-tsconfigjson

Комментарии:

1. Спасибо, это остановилось, чтобы решить проблему. Я пытаюсь с помощью ts.createProject, но у меня не получилось. Вы советуете использовать ts.createProject?