UNPKG

1.09 kBJavaScriptView Raw
1'use strict';
2var path = require('path');
3var pkgUp = require('pkg-up');
4var multimatch = require('multimatch');
5var arrify = require('arrify');
6var resolvePkg = require('resolve-pkg');
7
8module.exports = function (grunt, opts) {
9 opts = opts || {};
10
11 var pattern = arrify(opts.pattern || ['grunt-*', '@*/grunt-*']);
12 var config = opts.config || pkgUp.sync();
13 var scope = arrify(opts.scope || ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']);
14
15 if (typeof config === 'string') {
16 config = require(path.resolve(config));
17 }
18
19 pattern.push('!grunt', '!grunt-cli');
20
21 var names = scope.reduce(function (result, prop) {
22 var deps = config[prop] || [];
23 return result.concat(Array.isArray(deps) ? deps : Object.keys(deps));
24 }, []);
25
26 multimatch(names, pattern).forEach(function (pkgName) {
27 if (opts.requireResolution === true) {
28 try {
29 grunt.loadTasks(resolvePkg(path.join(pkgName, 'tasks')));
30 } catch (err) {
31 grunt.log.error('npm package "' + pkgName + '" not found. Is it installed?');
32 }
33 } else {
34 grunt.loadNpmTasks(pkgName);
35 }
36 });
37};