我通常通过npm运行gulp,例如在我的package.json
中"scripts": {
"test": "gulp test",
"minify": "gulp minify"
}
然后我可以运行
等命令npm run minify
哪个好,但每次我在gulpfile中有新任务时,我都需要将它们添加到脚本部分下的package.json中,有没有更好的方法呢?
原因:我只在我的path
全局安装npm,因此所有其他模块都不会污染我的path
,因此我需要通过npm
运行它们脚本
答案 0 :(得分:30)
我有没有得到你的待遇:我继续为你做了一个简单的npm模块来处理这个问题。
<强> gulp-npm-script-sync 强>
以下是它的要点:
var file = fs.readFileSync(config.path || 'package.json', 'utf-8');
var pkg = JSON.parse(file);
var tasks = gulp.tasks;
pkg.scripts = pkg.scripts || {};
Object.keys(tasks).forEach(function (t) {
pkg.scripts[t] = 'gulp '+tasks[t].name;
});
full source做的事情就像用同样的缩进和东西写回来的package.json一样。
所以,请继续:npm install --save-dev gulp-npm-script-sync
坚持你的gulpfile:
var gulp = require('gulp');
var sync = require('gulp-npm-script-sync');
// your gulpfile contents
sync(gulp);
每次使用新任务更新gulpfile时,都会更新package.json。
你甚至可以将它扔进一个gulp任务:
gulp.task('sync', function () {
sync(gulp);
}
答案 1 :(得分:25)
Brian Brennan给了a fantastic suggestion:补充道
./node_modules/.bin
到您的$PATH
变量。 然后您可以在本地运行 只要您位于a的顶级目录中,就会安装实用程序 项目强>
来源:Keeping clean。
无需全局安装软件包即可轻松调用它。请记住,上面的路径应该预先。
或者,从版本2.0.0开始,npm
提供了将额外参数传递给运行命令的功能。这些参数将简单地附加到您的脚本命令。
在您的情况下,来自package.json
的以下脚本:
"scripts": {
"gulp": "gulp"
},
可以npm run gulp -- test
或npm run gulp -- minify
等方式调用