Запустите npm script из gulp задачи

Как запустить команду npm script из задачи gulp?

package.json

"scripts": 
{
    "tsc": "tsc -w"
}

gulpfile.js

gulp.task('compile:app', function(){
  return gulp.src('src/**/*.ts')
    .pipe(/*npm run tsc*/)
    .pipe(gulp.dest('./dist'))
    .pipe(connect.reload());
});

Я хочу сделать это, потому что запуск npm run tsc не дает мне никакой ошибки, но если я использую gulp-typescript для компиляции .ts, тогда я получаю кучу ошибок.

Ответ 1

Вы можете получить эквивалент, используя gulp-typescript

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

gulp.task('default', function () {
  var tsProject = ts.createProject('tsconfig.json');

  var result = tsProject.src().pipe(ts(tsProject));

  return result.js.pipe(gulp.dest('release'));
});

gulp.task('watch', ['default'], function() {
  gulp.watch('src/*.ts', ['default']);
});

Затем на package.json

"scripts": {
  "gulp": "gulp",
  "gulp-watch": "gulp watch"
}

Затем запустите

npm run gulp-watch

<ы > Альтернативно, используя shell

var gulp = require('gulp');
var shell = require('gulp-shell');

gulp.task('default', function () {
  return gulp.src('src/**/*.ts')
    .pipe(shell('npm run tsc'))
    .pipe(gulp.dest('./dist'))
    .pipe(connect.reload());
});

gulp-shell был в черный список вы можете видеть, почему здесь

Другой альтернативой может быть установка webpack.

Ответ 2

Вы можете попытаться реализовать его с помощью пакета childprecess node или

использовать https://www.npmjs.com/package/gulp-run

var run = require('gulp-run');
gulp.task('compile:app', function(){
  return gulp.src(['src/**/*.js','src/**/*.map'])
    .pipe(run('npm run tsc'))
    .pipe(gulp.dest('./dist'))
    .pipe(connect.reload());

});