1 | 'use strict';
|
2 | var path = require('path');
|
3 | var pkgUp = require('pkg-up');
|
4 | var multimatch = require('multimatch');
|
5 | var arrify = require('arrify');
|
6 | var resolvePkg = require('resolve-pkg');
|
7 |
|
8 | module.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 | };
|