我想使用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);
});
答案 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.spawn
。 spawn
接受命令的名称,然后是参数列表。如果您使用选项 stdio: 'inherit'
,它不会吞下它的输出。
function childProcessTask() {
return cp.spawn('echo', ['one', 'two'], {stdio: 'inherit'});
}