我想从gulp运行一个shell命令,使用gulp-shell。我看到gulpfile使用了以下习惯用法。这是从gulp任务运行命令的惯用方法吗?
gulp-shell
var cmd = 'ls'; gulp.src('', {read: false}) .pipe(shell(cmd, {quiet: true})) .on('error', function (err) { gutil.log(err); });
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); }); })
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); }); });
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
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; });
nlejzf6q5#
根据Gulp的文档,您可以像这样运行echo这样的命令:
echo
const cp = require('child_process'); function childProcessTask() { return cp.exec('echo *.js'); } exports.default = childProcessTask;
exec接受一个将由shell解析的字符串,并且默认情况下它使输出静音。我个人喜欢用child_process.spawn来代替,spawn接受命令名,然后是一个参数列表,如果你使用stdio: 'inherit'选项,它不会吞掉它的输出。
exec
child_process.spawn
spawn
stdio: 'inherit'
function childProcessTask() { return cp.spawn('echo', ['one', 'two'], {stdio: 'inherit'}); }
child_process.exec(command, options, callback)
child_process.spawn(command, args, options)
5条答案
按热度按时间okxuctiv1#
gulp-shell
已被列入黑名单。您应该使用gulp-exec,它也有更好的文档。对于你的情况它实际上说:
注意:如果你只想运行一个命令,就直接运行命令,不要使用这个插件:
x6h2sr282#
保持控制台输出相同(例如,颜色)的新方法:
参见:https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
hgc7kmma3#
使用gulp 4,您的任务可以直接返回一个子进程来表示任务完成:
gulp-v4-running-shell-commands.md
5hcedyr04#
您可以简单地这样做:
nlejzf6q5#
根据Gulp的文档,您可以像这样运行
echo
这样的命令:exec
接受一个将由shell解析的字符串,并且默认情况下它使输出静音。我个人喜欢用
child_process.spawn
来代替,spawn
接受命令名,然后是一个参数列表,如果你使用stdio: 'inherit'
选项,它不会吞掉它的输出。参考文献:
child_process.exec(command, options, callback)
child_process.spawn(command, args, options)