从gulp任务运行npm脚本

dldeef67  于 2022-12-08  发布在  Gulp
关注(0)|答案(3)|浏览(211)

如何从gulp任务内部运行npm脚本命令?
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,我会得到一堆错误。

q9rjltbz

q9rjltbz1#

您可以使用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

de90aj5v

de90aj5v2#

在这个简单的事情上浪费了大约1个小时,寻找一个~完整的答案,所以在这里添加另一个:
如果您的问题仅出现在 typescript (tsc)上,请参阅https://stackoverflow.com/a/36633318/984471
否则,请参见下面的通用答案。
问题标题是通用的,所以下面先给出一个通用的例子,然后再给出答案。

一般范例:

1.如果您还没有安装nodejs,最好安装LTS版本,请从以下位置安装:https://nodejs.org/
1.安装如下:
npm install --save-dev gulp gulp-run
1.文件package.json包含以下内容(可以包含其他内容):

{
      "name": "myproject",
      "scripts": {
          "cmd1": "echo \"yay! cmd1 command is run.\" && exit 1",
      }
}

1.创建包含以下内容的文件gulpfile.js

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

gulp.task('mywatchtask1', function () {
    // watch for javascript file (*.js) changes, in current directory (./)
    gulp.watch('./*.js', function () {

        // run an npm command called `test`, when above js file changes
        return run('npm run cmd1').exec();

        // uncomment below, and comment above, if you have problems
        // return run('echo Hello World').exec();
    });
});

1.是否使用gulp运行任务mywatchtask1
gulp mywatchtask1
现在,gulp正在监视当前目录中js文件的变化。
如果发生任何更改,则运行npm命令cmd1,每次js文件之一更改时,它将打印yay! cmd1 command is run.

**对于此问题:**作为另一个示例:

a)package.json将具有

"tsc": "tsc -w",

而不是以下内容:

"cmd1": "echo \"yay! cmd1 command is run.\" && exit 1",

B)且,gulpfile.js将具有:

return run('npm run tsc').exec();

而不是下面:

return run('npm run cmd1').exec();

希望能有所帮助。

aelbi1ox

aelbi1ox3#

您可以尝试使用childprocess节点包或
使用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());

});

相关问题