当我输入 npm start 时如何启动 Gulp watch 任务
How to start Gulp watch task when I type npm start
我有一个 gulp.js 文件,其中包括:
gulp.task('default', ['watch']);
哪个启动watch任务
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
然后在 productionScripts 中对文件的任何保存更改,watch 任务将连接文件。
我想做的是在我的 package.json 中,我想在输入 npm start 时启动这个手表(这已经启动了我的节点服务器)。
package.json
"start": "node server.js",
更新--------
Ben(b3nj4m.com),我试过你所说的。手表和服务器启动。然而,一切都运行了两次(可能是由于编辑器的原因,不相关),但是当我用 gulp.
启动它时,我确实丢失了我的服务器日志
[15:31:18] Starting 'autoConcat'...
[15:31:18] Finished 'autoConcat' after 147 ms
[15:31:19] Starting 'autoConcat'...
[15:31:19] Finished 'autoConcat' after 138 ms
[15:31:20] Starting 'autoConcat'...
[15:31:20] Finished 'autoConcat' after 127 ms
[15:31:23] Starting 'autoConcat'...
这就像服务器因更改而重新启动与串联文件更改之间存在循环。
我的一个项目中有这样的东西。请注意,它会将两个进程置于后台 - 您可以使用 ps
获取 ID 并使用 kill <pid>
.
停止它
"scripts": {
"start": "{ gulp watch & node server.js & }"
}
也要禁用日志记录:
"scripts": {
"start": "{ gulp watch --silent & node server.js & }"
}
您可以从您的 gulpfile 运行 您的服务器:
var child = require('child_process');
var fs = require('fs');
gulp.task('default', ['server', 'watch']);
gulp.task('server', function() {
var server = child.spawn('node', ['server.js']);
var log = fs.createWriteStream('server.log', {flags: 'a'});
server.stdout.pipe(log);
server.stderr.pipe(log);
});
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
然后将您的 npm start
定义更改为:
"scripts": {
"start": "gulp"
}
要考虑的一个最佳做法是使用 nodemon and gulp-nodemon,然后喜欢已接受的答案,使用 npm start
从 npm 触发 gulp 脚本。它非常快,您可以在文件更改时重新启动节点服务器。例如:
gulpfile.js
var gulp = require('gulp');
var nodemon = require('gulp-nodemon');
...
var nodemonOptions = {
script: 'bin/www.js',
ext: 'js',
env: { 'NODE_ENV': 'development' },
verbose: false,
ignore: [],
watch: ['bin/*', 'routes/*', 'app.js']
};
gulp.task('start', function () {
nodemon(nodemonOptions)
.on('restart', function () {
console.log('restarted!')
});
});
package.json
{
...
"scripts": {
"start": "gulp start"
},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-nodemon": "^2.0.4"
}
}
您可以使用包 concurrently
将 start
中的多个任务连接到 package.json
中:
{
"start": "concurrent \"node server.js\" \"gulp\" "
}
和 运行 npm start
来自您的终端。这将执行 start
.
内的所有语句
供参考:https://www.npmjs.com/package/concurrently
编辑:
正如@Josh 在评论中指出的那样,CLI 名称现在与包名称匹配。因此,您可以将脚本编写为:
{
"start": "concurrently \"node server.js\" \"gulp\" "
}
我有一个 gulp.js 文件,其中包括:
gulp.task('default', ['watch']);
哪个启动watch任务
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
然后在 productionScripts 中对文件的任何保存更改,watch 任务将连接文件。
我想做的是在我的 package.json 中,我想在输入 npm start 时启动这个手表(这已经启动了我的节点服务器)。
package.json
"start": "node server.js",
更新--------
Ben(b3nj4m.com),我试过你所说的。手表和服务器启动。然而,一切都运行了两次(可能是由于编辑器的原因,不相关),但是当我用 gulp.
启动它时,我确实丢失了我的服务器日志[15:31:18] Starting 'autoConcat'...
[15:31:18] Finished 'autoConcat' after 147 ms
[15:31:19] Starting 'autoConcat'...
[15:31:19] Finished 'autoConcat' after 138 ms
[15:31:20] Starting 'autoConcat'...
[15:31:20] Finished 'autoConcat' after 127 ms
[15:31:23] Starting 'autoConcat'...
这就像服务器因更改而重新启动与串联文件更改之间存在循环。
我的一个项目中有这样的东西。请注意,它会将两个进程置于后台 - 您可以使用 ps
获取 ID 并使用 kill <pid>
.
"scripts": {
"start": "{ gulp watch & node server.js & }"
}
也要禁用日志记录:
"scripts": {
"start": "{ gulp watch --silent & node server.js & }"
}
您可以从您的 gulpfile 运行 您的服务器:
var child = require('child_process');
var fs = require('fs');
gulp.task('default', ['server', 'watch']);
gulp.task('server', function() {
var server = child.spawn('node', ['server.js']);
var log = fs.createWriteStream('server.log', {flags: 'a'});
server.stdout.pipe(log);
server.stderr.pipe(log);
});
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
然后将您的 npm start
定义更改为:
"scripts": {
"start": "gulp"
}
要考虑的一个最佳做法是使用 nodemon and gulp-nodemon,然后喜欢已接受的答案,使用 npm start
从 npm 触发 gulp 脚本。它非常快,您可以在文件更改时重新启动节点服务器。例如:
gulpfile.js
var gulp = require('gulp');
var nodemon = require('gulp-nodemon');
...
var nodemonOptions = {
script: 'bin/www.js',
ext: 'js',
env: { 'NODE_ENV': 'development' },
verbose: false,
ignore: [],
watch: ['bin/*', 'routes/*', 'app.js']
};
gulp.task('start', function () {
nodemon(nodemonOptions)
.on('restart', function () {
console.log('restarted!')
});
});
package.json
{
...
"scripts": {
"start": "gulp start"
},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-nodemon": "^2.0.4"
}
}
您可以使用包 concurrently
将 start
中的多个任务连接到 package.json
中:
{
"start": "concurrent \"node server.js\" \"gulp\" "
}
和 运行 npm start
来自您的终端。这将执行 start
.
供参考:https://www.npmjs.com/package/concurrently
编辑:
正如@Josh 在评论中指出的那样,CLI 名称现在与包名称匹配。因此,您可以将脚本编写为:
{
"start": "concurrently \"node server.js\" \"gulp\" "
}