Gulp 插件 —— gulp-load-plugins

  • 自动加载 package.json 中的任何插件
  • 可以从包配置文件中加载插件,并根据你的需要将他们挂在任何对象上

用法

首先,给定一个 package.json ,里面定义好了一些需要依赖的包。

{
    "dependencies": {
        "gulp-jshint": "*",
        "gulp-concat": "*"
    }
}

然后,在你的 gulpfile.js 中添加如下几行代码

var gulp = require('gulp');
var gulpLoadPlugins = require('gulp-load-plugins');
var plugins = gulpLoadPlugins();

或者,使用简写

var plugins = require('gulp-load-plugins')();

接下来,会发生神奇的事情(大体上,插件都是懒加载的,但是实际上并不会感觉有任何不同):

plugins.jshint = require('gulp-jshint');
plugins.concat = require('gulp-concat');

这样,你可以像手动加载的情况下那样去使用它们,但是引用方式发生了变化,你应该使用 plugins.jshint() 而不再是 jshint().

可喜可贺!这样你的双手得以解放,你不必再手动去 require 这些插件。

Options

你可以传入可选的配置项,就像下面这样,里面写的都是这些配置项的默认值:

gulpLoadPlugins({
    DEBUG: false, // 为 ***true***, 插件会在控制台打印日志。在提交 bug 或者 issue debugging 时将很有用。
    pattern: ['gulp-*', 'gulp.*'], // 需要查找模式
    config: 'package.json', // 指定哪里去寻找插件,默认从 ***process.cwd()*** 开始查找。
    scope: ['dependencies', 'devDependencies', 'peerDependencies'], // 指定查找配置中那些 keys 下面的插件。
    replaceString: /^gulp(-|\.)/, // 指定将模块对象加载到上下文中时,需要移除的插件名字的哪个部分。
    camelize: true, // 如果设置为 ***true*** 时,将 *gulp-plugin-name* 重命名为 *gulpPluginName*。
    lazy: true, // 是否启用按需加载
    rename: {}, // 插件别名的对应关系
    renameFn: function (name) { ... } // 处理插件重命名的方法,未指定则使用默认规则
});

重命名

从 0.8.0开始,你可以向本插件指定一个各依赖包别名的对应关系。例如,你需要使用 gulp-ruby-sass, 但是你想要使用 sass 来使用这个插件

gulpLoadPlugins({
  rename: {
    'gulp-ruby-sass': 'sass'
  }
});

注意,如果指定了你自己的 renameFn 方法,这时你配置的 rename 选项依然生效,但是 replaceStringcamelize 将会被忽略。

npm Scopes

gulp-load-plugins 支持 npm scope,主要的区别在于,你需要通过 plugins 对象上的对应于 scope 的属性来访问。例如:@myco/gulp-test-plugin 这个插件,你需要使用下面的方式来访问:

var plugins = require('gulp-load-plugins')();
plugins.myco.testPlugin();

Lazy Loading

在 0.4.0以及之前版本,懒加载仅仅适用于返回一个方法的插件。但是在之后的版本中,它适用于任何插件。如果你遇到了相关的问题,试着关闭懒加载,看是否能解决问题。

Credit

本插件大部分归功于 @sindresorhusload-grunt-plugins 插件,几乎与它是相同的,只是稍微做了些修改来适配 gulp、来暴露出所依赖插件的引用。

results matching ""

    No results matching ""