diff --git a/index.js b/index.js index b2bc165..5f8a2f7 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,7 @@ var path = require('path'); var pkgUp = require('pkg-up'); var multimatch = require('multimatch'); var arrify = require('arrify'); -var resolveCwd = require('resolve-cwd'); +var resolvePkg = require('resolve-pkg'); module.exports = function (grunt, opts) { opts = opts || {}; @@ -25,15 +25,9 @@ module.exports = function (grunt, opts) { multimatch(names, pattern).forEach(function (pkgName) { if (opts.requireResolution === true) { - // This resolution is complicated because most grunt plugins are written - // in violation of package.json conventions. And example is not having a - // `main` field defined, which will cause `require` or `resolve` - // to fail. So better to lookup a guaranteed file, such as package.json. - var pkg = resolveCwd(path.join(pkgName, 'package.json')); - var root = path.dirname(pkg); - pkgName = path.join(root, 'tasks'); + grunt.loadTasks(resolvePkg(path.join(pkgName, 'tasks'))); + } else { + grunt.loadNpmTasks(pkgName); } - - grunt.loadTasks(pkgName); }); }; diff --git a/package.json b/package.json index 896d8f7..640953c 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ "arrify": "^1.0.0", "multimatch": "^2.0.0", "pkg-up": "^1.0.0", - "resolve-cwd": "^1.0.0" + "resolve-pkg": "^0.1.0" }, "devDependencies": { "grunt": "^0.4.2", "grunt-cli": "^0.1.13", - "grunt-svgmin": "^2.0.0", + "grunt-svgmin": "^3.1.0", "xo": "*" }, "engines": { diff --git a/readme.md b/readme.md index 83d4e03..3c78be1 100644 --- a/readme.md +++ b/readme.md @@ -39,7 +39,7 @@ $ npm install --save-dev load-grunt-tasks ```js // Gruntfile.js -module.exports = function (grunt) { +module.exports = grunt => { // load all grunt tasks matching the ['grunt-*', '@*/grunt-*'] patterns require('load-grunt-tasks')(grunt); @@ -101,12 +101,6 @@ require('load-grunt-tasks')(grunt, {scope: 'devDependencies'}); require('load-grunt-tasks')(grunt, {scope: ['devDependencies', 'dependencies']}); ``` -### Load from all `node_modules` in the current hierarchy - -```js -require('load-grunt-tasks')(grunt, {requireResolution: true}); -``` - ### All options in use ```js @@ -114,7 +108,7 @@ require('load-grunt-tasks')(grunt, { pattern: 'grunt-contrib-*', config: '../package.json', scope: 'devDependencies', - requireResolution: false + requireResolution: true }); ``` @@ -139,11 +133,12 @@ Values: `'dependencies'`, `'devDependencies'`, `'peerDependencies'`, `'optionalD ### requireResolution -Traverse the file hierarchy, just like node does when requiring modules. - -Type: `boolean` +Type: `boolean` Default: `false` +Traverse up the file hierarchy looking for dependencies like `require()`, rather than the default grunt-like behavior of loading tasks only in the immediate `node_modules` directory. + + ## License MIT © [Sindre Sorhus](http://sindresorhus.com)