从gulp运行shell命令

时间:2015-04-08 09:58:32

标签: 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);
});

5 个答案:

答案 0 :(得分:95)

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

答案 1 :(得分:36)

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

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



@Test(expected=IllegalStateException.class)
public void testThrowIOException() {
    PowerMockito.mockStatic(IOUtils.class);
    PowerMockito.when(IOUtils.toString()).thenThrow(
             new IOException("fake IOException"));
    FileLoader fileLoader = new FileLoader();
    Whitebox.invokeMethod(fileLoader, 
            "readAndStoreTermsOfUseForBrand", new Brand(...));
    // If IllegalStateException is not thrown then this test case fails (see "expected" above)
}




答案 2 :(得分:10)

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

'use strict';

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

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

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

答案 3 :(得分:0)

您可以简单地执行以下操作:

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

答案 4 :(得分:0)

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

const cp = require('child_process');

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

exports.default = childProcessTask;

exec 接受一个将由 shell 解析的字符串,默认情况下它会静音输出。

我个人喜欢改用 child_process.spawnspawn 接受命令的名称,然后是参数列表。如果您使用选项 stdio: 'inherit',它不会吞下它的输出。

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

参考: