从gulp运行shell命令

Ben*_*Ben 45 javascript gulp

我想从gulp运行一个shell命令,使用gulp-shell.我看到以下习惯用于gulpfile.

这是从gulp任务运行命令的惯用方法吗?

var cmd = 'ls';
gulp.src('', {read: false})
    .pipe(shell(cmd, {quiet: true}))
    .on('error', function (err) {
       gutil.log(err);
});
Run Code Online (Sandbox Code Playgroud)

ddp*_*rrt 102

gulp-shell已被列入黑名单.你应该使用gulp-exec代替,它也有更好的文档.

对于你的情况,它实际上说:

注意:如果您只想运行命令,只需运行命令,不要使用此插件:

var exec = require('child_process').exec;

gulp.task('task', function (cb) {
  exec('ping localhost', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
})
Run Code Online (Sandbox Code Playgroud)

  • Gulp有一个黑名单包,不是用"Gulp方式"写的.看看这里的列表:https://github.com/gulpjs/plugins/blob/master/src/blackList.json (27认同)
  • `gulp-shell已被列入黑名单:你是什么意思? (24认同)
  • 传递给`exec`的函数不会将任何内容记录到Gulp.为什么不发生这种情况? (8认同)
  • 你在答案中的意思是"只运行命令"..如何在没有这样的插件的情况下通过gulp任务运行命令?(必须是一个任务,因为gulp.watch在每次文件更改时调用它 (5认同)
  • 更新:仍然没有记录任何内容. (3认同)

Aut*_*nge 40

执行此操作的新方法使控制台输出保持相同(例如,使用颜色):

请参阅:https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

var gulp = require('gulp');
var spawn = require('child_process').spawn;

gulp.task('my-task', function (cb) {
  var cmd = spawn('cmd', ['arg1', 'agr2'], {stdio: 'inherit'});
  cmd.on('close', function (code) {
    console.log('my-task exited with code ' + code);
    cb(code);
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 但是如果你在Windows上要小心,因为spawn()无法可靠地工作,请参阅[此节点问题](https://github.com/nodejs/node-v0.x-archive/issues/2318) (3认同)
  • 此解决方案在 Windows 上不适用于我,但在这里找到了另一个解决方案 - /sf/ask/3208933171/ -或禁用所有输出输入 (2认同)

bir*_*aum 14

使用gulp 4,您的任务可以直接返回子进程以指示任务完成:

'use strict';

var cp = require('child_process');
var gulp = require('gulp');

gulp.task('reset', function() {
  return cp.execFile('git checkout -- .');
});
Run Code Online (Sandbox Code Playgroud)

https://github.com/gulpjs/gulp/blob/4.0/docs/recipes/running-shell-commands.md

  • Gulp 4是芝诺悖论的现代化身. (5认同)
  • 请注意,gulp 4仍未正式发布. (2认同)