通过npm自动运行gulp任务

How*_*ard 35 node.js npm gulp

我通常通过npm运行gulp,例如在我的package.json中

"scripts": {
    "test": "gulp test",
    "minify": "gulp minify"
}
Run Code Online (Sandbox Code Playgroud)

然后我就可以运行命令了

npm run minify
Run Code Online (Sandbox Code Playgroud)

哪个没关系,但每次我在gulpfile中都有新任务时,我需要将它们添加到scripts部分下的package.json中,有没有更好的方法呢?

原因:我只在全局安装npm,path所以所有其他模块都不会污染我的path,所以我需要通过npm脚本运行它们

Aus*_*ray 30

我有没有得到你的待遇:我继续为你做了一个简单的npm模块来处理这个问题.

吞掉-NPM-脚本同步

以下是它的要点:

  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;
  });
Run Code Online (Sandbox Code Playgroud)

完整的源代码做这样的东西写的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);
Run Code Online (Sandbox Code Playgroud)

每次使用新任务更新gulpfile时,它都会更新package.json.

你甚至可以把它扔进一个gulp任务:

gulp.task('sync', function () {
  sync(gulp);
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为Roman的下面的答案更优雅,你可以减少一点开发依赖. (2认同)

Rom*_*iko 26

Brian Brennan提出了一个很棒的建议:添加 ./node_modules/.bin到你的$PATH变量中.然后,只要您位于项目的顶级目录中,就可以运行本地安装的实用程序.

资料来源:保持清洁.

无需全局安装软件包即可轻松调用它.请记住,上面的路径应该是前置的.


或者,从2.0.0版开始,npm提供了将额外参数传递给运行命令的功能.这些参数将简单地附加到您的脚本命令.

在您的情况下,您的以下脚本package.json:

"scripts": {
  "gulp": "gulp"
},
Run Code Online (Sandbox Code Playgroud)

可以被调用为npm run gulp -- test,或npm run gulp -- minify