从gulp运行shell命令

fkaflof6  于 2022-12-16  发布在  Gulp
关注(0)|答案(5)|浏览(307)

我想从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);
});
okxuctiv

okxuctiv1#

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);
  });
})
x6h2sr28

x6h2sr282#

保持控制台输出相同(例如,颜色)的新方法:
参见: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);
  });
});
hgc7kmma

hgc7kmma3#

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

'use strict';

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

gulp.task('reset', function() {
  return cp.execFile('git checkout -- .');
});

gulp-v4-running-shell-commands.md

5hcedyr0

5hcedyr04#

您可以简单地这样做:

const { spawn } = require('child_process');
const gulp = require('gulp');

gulp.task('list', function() {
    const cmd = spawn('ls');
    cmd.stdout.on('data', (data) => {
        console.log(`stdout: ${data}`);
    });
    return cmd;
});
nlejzf6q

nlejzf6q5#

根据Gulp的文档,您可以像这样运行echo这样的命令:

const cp = require('child_process');

function childProcessTask() {
  return cp.exec('echo *.js');
}

exports.default = childProcessTask;

exec接受一个将由shell解析的字符串,并且默认情况下它使输出静音。
我个人喜欢用child_process.spawn来代替,spawn接受命令名,然后是一个参数列表,如果你使用stdio: 'inherit'选项,它不会吞掉它的输出。

function childProcessTask() {
  return cp.spawn('echo', ['one', 'two'], {stdio: 'inherit'});
}

参考文献:

  • Gulp 文件:返回子进程
  • 节点文档:child_process.exec(command, options, callback)
  • 节点文档:child_process.spawn(command, args, options)

相关问题