From af0492480718130cf398e9341701e49a7d6d0d4f Mon Sep 17 00:00:00 2001 From: martinandert Date: Sun, 22 Mar 2015 21:31:24 +0100 Subject: [PATCH 1/6] rename ignoreDependencies to followRequires (negated) --- lib/commoner.js | 16 ++++++++-------- lib/context.js | 6 +++--- lib/reader.js | 2 +- test/run.js | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/commoner.js b/lib/commoner.js index 689a2dc..23e0ce2 100644 --- a/lib/commoner.js +++ b/lib/commoner.js @@ -119,7 +119,7 @@ Cp.buildP = function(options, roots) { context.setCacheDirectory(self.cacheDir); - context.setIgnoreDependencies(self.ignoreDependencies); + context.setFollowRequires(self.followRequires); context.setRelativize(self.relativize); @@ -130,7 +130,7 @@ Cp.buildP = function(options, roots) { self.resolvers, self.processors ).readMultiP(context.expandIdsOrGlobsP(roots)) - .then(context.ignoreDependencies ? pass : collectDepsP) + .then(context.followRequires ? collectRequiresP : pass) .then(outputModules) .then(outputDir ? printModuleIds : pass) .then(finish, function(err) { @@ -156,7 +156,7 @@ function pass(modules) { return modules; } -function collectDepsP(rootModules) { +function collectRequiresP(rootModules) { var modules = []; var seenIds = {}; @@ -232,7 +232,7 @@ function cliBuildP(commoner, version) { // variables is preferable to passing them as arguments. commoner.preferredFileExtension = pfe; commoner.watch = options.watch; - commoner.ignoreDependencies = !options.followRequires; + commoner.followRequires = options.followRequires; commoner.relativize = options.relativize; commoner.useProvidesModule = options.useProvidesModule; commoner.sourceCharset = normalizeCharset(options.sourceCharset); @@ -258,8 +258,8 @@ function cliBuildP(commoner, version) { roots = [""]; commoner.forceResolve("", util.readFromStdinP()); - // Ignore dependencies because we wouldn't know how to find them. - commoner.ignoreDependencies = true; + // Don't follow requires because we wouldn't know how to find them. + commoner.followRequires = false; } else { var first = absolutePath(workingDir, args[0]); @@ -275,8 +275,8 @@ function cliBuildP(commoner, version) { util.readFileP(first, commoner.sourceCharset) ); - // Ignore dependencies because we wouldn't know how to find them. - commoner.ignoreDependencies = true; + // Don't follow requires because we wouldn't know how to find them. + commoner.followRequires = false; } else if (stats.isDirectory(first)) { sourceDir = first; diff --git a/lib/context.js b/lib/context.js index fabae99..e7ca430 100644 --- a/lib/context.js +++ b/lib/context.js @@ -82,14 +82,14 @@ BCp.spawnP = function(command, args, kwargs) { return deferred.promise; }; -BCp.setIgnoreDependencies = function(value) { - Object.defineProperty(this, "ignoreDependencies", { +BCp.setFollowRequires = function(value) { + Object.defineProperty(this, "followRequires", { value: !!value }); }; // This default can be overridden by individual BuildContext instances. -BCp.setIgnoreDependencies(false); +BCp.setFollowRequires(true); BCp.setRelativize = function(value) { Object.defineProperty(this, "relativize", { diff --git a/lib/reader.js b/lib/reader.js index bea6500..c06de09 100644 --- a/lib/reader.js +++ b/lib/reader.js @@ -34,7 +34,7 @@ function ModuleReader(context, resolvers, processors) { resolvers = hashCallbacks("resolvers", resolvers, warnMissingModule); var procArgs = [processors]; - if (context.relativize && !context.ignoreDependencies) + if (context.relativize && context.followRequires) procArgs.push(require("./relative").getProcessor(self)); processors = hashCallbacks("processors", procArgs); diff --git a/test/run.js b/test/run.js index 27214d0..196cb10 100644 --- a/test/run.js +++ b/test/run.js @@ -401,7 +401,7 @@ describe("canonical module identifiers", function() { it("should replace non-canonical required identifiers", function(done) { function helperP(context) { - assert.strictEqual(context.ignoreDependencies, false); + assert.strictEqual(context.followRequires, true); var reader = new ModuleReader(context, [ getProvidedP, From 9416fc5e85da785d1dbe062c0702c34cddce5f9b Mon Sep 17 00:00:00 2001 From: martinandert Date: Sun, 22 Mar 2015 23:09:31 +0100 Subject: [PATCH 2/6] adds ability to ignore ids based on specified patterns --- lib/commoner.js | 13 +++++++++++++ lib/context.js | 9 +++++++++ lib/reader.js | 13 +++++++++++++ lib/relative.js | 8 ++++++++ main.js | 1 + test/run.js | 3 +++ test/source/home.js | 3 +++ 7 files changed, 50 insertions(+) diff --git a/lib/commoner.js b/lib/commoner.js index 23e0ce2..23f66fc 100644 --- a/lib/commoner.js +++ b/lib/commoner.js @@ -27,6 +27,7 @@ function Commoner() { Object.defineProperties(self, { customVersion: { value: null, writable: true }, customOptions: { value: [] }, + ignorePatterns: { value: [] }, resolvers: { value: [] }, processors: { value: [] } }); @@ -69,6 +70,16 @@ Cp.process = function(processor) { return this; // For chaining. }; +// Specify specific id patterns that should be ignored and not processed +Cp.ignore = function() { + each.call(arguments, function(pattern) { + assert.ok(pattern instanceof RegExp, "ignore pattern must be a regular expression"); + this.ignorePatterns.push(pattern); + }, this); + + return this; // For chaining. +}; + Cp.buildP = function(options, roots) { var self = this; var sourceDir = options.sourceDir; @@ -125,6 +136,8 @@ Cp.buildP = function(options, roots) { context.setUseProvidesModule(self.useProvidesModule); + context.setIgnorePatterns(self.ignorePatterns); + return new ModuleReader( context, self.resolvers, diff --git a/lib/context.js b/lib/context.js index e7ca430..6976601 100644 --- a/lib/context.js +++ b/lib/context.js @@ -109,6 +109,15 @@ BCp.setUseProvidesModule = function(value) { // This default can be overridden by individual BuildContext instances. BCp.setUseProvidesModule(false); +BCp.setIgnorePatterns = function(ignorePatterns) { + Object.defineProperty(this, "ignorePatterns", { + value: ignorePatterns || [] + }); +}; + +// This default can be overridden by individual BuildContext instances. +BCp.setIgnorePatterns([]); + BCp.setCacheDirectory = function(dir) { if (!dir) { // Disable the cache directory. diff --git a/lib/reader.js b/lib/reader.js index c06de09..fb457c6 100644 --- a/lib/reader.js +++ b/lib/reader.js @@ -215,11 +215,24 @@ ModuleReader.prototype = { readMultiP: function(ids) { var reader = this; + var ignorePatterns = reader.context.ignorePatterns; return Q(ids).all().then(function(ids) { if (ids.length === 0) return ids; // Shortcut. + if (ignorePatterns.length) { + ids = ids.filter(function(id) { + for (var i = 0; i < ignorePatterns.length; i++) { + if (ignorePatterns[i].test(id)) { + return false; + } + } + + return true; + }); + } + var modulePs = ids.map(reader.readModuleP, reader); return Q(modulePs).all().then(function(modules) { var seen = {}; diff --git a/lib/relative.js b/lib/relative.js index 992dfec..645231b 100644 --- a/lib/relative.js +++ b/lib/relative.js @@ -78,6 +78,14 @@ Rp.absolutizeP = function(moduleId, requiredId) { }; Rp.relativizeP = function(moduleId, requiredId) { + var ignorePatterns = this.reader && this.reader.context.ignorePatterns || []; + + for (var i = 0; i < ignorePatterns.length; i++) { + if (ignorePatterns[i].test(requiredId)) { + return Q(requiredId); + } + } + return this.absolutizeP( moduleId, requiredId diff --git a/main.js b/main.js index bf9adca..07a7be6 100644 --- a/main.js +++ b/main.js @@ -14,3 +14,4 @@ function defCallback(name) { defCallback("version"); defCallback("resolve"); defCallback("process"); +defCallback("ignore"); diff --git a/test/run.js b/test/run.js index 196cb10..e102f6e 100644 --- a/test/run.js +++ b/test/run.js @@ -29,6 +29,7 @@ function getNewContext(options) { context.setCacheDirectory(path.join(outputDir, options.cacheDirectory)); context.setRelativize(options.relative === undefined || options.relative); context.setUseProvidesModule(options.useProvidesModule === undefined || options.useProvidesModule ); + context.setIgnorePatterns(options.ignorePatterns || [ /ignored/, /^react[\/$]/ ]); return context; } @@ -77,6 +78,8 @@ function checkHome(assert, home) { assert.strictEqual(typeof home.source, "string"); assert.notEqual(home.source.indexOf("exports"), -1); assert.strictEqual(home.source.indexOf('require("./assert");'), 0); + assert.notEqual(home.source.indexOf('require("ignored-module");'), -1); + assert.notEqual(home.source.indexOf('require("react/addons");'), -1); return home; }).invoke("getRequiredP").then(function(reqs) { assert.strictEqual(reqs.length, 1); diff --git a/test/source/home.js b/test/source/home.js index 49e1089..ca00fd1 100644 --- a/test/source/home.js +++ b/test/source/home.js @@ -2,4 +2,7 @@ require("assert"); require("./assert"); require("./tests/../assert"); +require("ignored-module"); +require("react/addons"); // also ignored + exports.name = "home"; From bb40880b456af52ee8e1b53ed6dc8bcef2ec83bd Mon Sep 17 00:00:00 2001 From: martinandert Date: Mon, 23 Mar 2015 00:21:08 +0100 Subject: [PATCH 3/6] adds cli flag to ignore modules defined as dependencies in package.json --- README.md | 1 + lib/commoner.js | 8 ++++++++ lib/reader.js | 1 + package.json | 3 ++- test/run.js | 6 +++++- test/source/home.js | 3 +++ 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ac0bc91..6a0d80f 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ Options: -x, --extension File extension to assume when resolving module identifiers --relativize Rewrite all module identifiers to be relative --follow-requires Scan modules for required dependencies + --ignore-dependencies Ignore modules defined as dependencies in package.json --cache-dir Alternate directory to use for disk cache --no-cache-dir Disable the disk cache --source-charset Charset of source (default: utf8) diff --git a/lib/commoner.js b/lib/commoner.js index 23f66fc..7c07e43 100644 --- a/lib/commoner.js +++ b/lib/commoner.js @@ -3,6 +3,7 @@ var path = require("path"); var fs = require("fs"); var Q = require("q"); var iconv = require("iconv-lite"); +var findup = require('findup-sync'); var ReadFileCache = require("./cache").ReadFileCache; var Watcher = require("./watcher").Watcher; var contextModule = require("./context"); @@ -136,6 +137,11 @@ Cp.buildP = function(options, roots) { context.setUseProvidesModule(self.useProvidesModule); + if (self.ignoreDependencies) { + var dependencies = Object.keys(require(findup("package.json")).dependencies); + self.ignorePatterns.push(new RegExp("^(" + dependencies.join('|') + ")(\\/|$)")); + } + context.setIgnorePatterns(self.ignorePatterns); return new ModuleReader( @@ -225,6 +231,7 @@ function cliBuildP(commoner, version) { "File extension to assume when resolving module identifiers") .option("--relativize", "Rewrite all module identifiers to be relative") .option("--follow-requires", "Scan modules for required dependencies") + .option("--ignore-dependencies", "Ignore modules defined as dependencies in package.json") .option("--use-provides-module", "Respect @providesModules pragma in files") .option("--cache-dir ", "Alternate directory to use for disk cache") .option("--no-cache-dir", "Disable the disk cache") @@ -246,6 +253,7 @@ function cliBuildP(commoner, version) { commoner.preferredFileExtension = pfe; commoner.watch = options.watch; commoner.followRequires = options.followRequires; + commoner.ignoreDependencies = options.ignoreDependencies; commoner.relativize = options.relativize; commoner.useProvidesModule = options.useProvidesModule; commoner.sourceCharset = normalizeCharset(options.sourceCharset); diff --git a/lib/reader.js b/lib/reader.js index fb457c6..7eea289 100644 --- a/lib/reader.js +++ b/lib/reader.js @@ -221,6 +221,7 @@ ModuleReader.prototype = { if (ids.length === 0) return ids; // Shortcut. + if (ignorePatterns.length) { ids = ids.filter(function(id) { for (var i = 0; i < ignorePatterns.length; i++) { diff --git a/package.json b/package.json index 5026f5d..26e99fa 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "mkdirp": "~0.5.0", "private": "~0.1.6", "install": "~0.1.7", - "iconv-lite": "~0.4.5" + "iconv-lite": "~0.4.5", + "findup-sync": "~0.2.1" }, "devDependencies": { "mocha": "~2.0.1" diff --git a/test/run.js b/test/run.js index e102f6e..af4e07c 100644 --- a/test/run.js +++ b/test/run.js @@ -1,4 +1,5 @@ var assert = require("assert"); +var findup = require('findup-sync'); var Watcher = require("../lib/watcher").Watcher; var BuildContext = require("../lib/context").BuildContext; var ModuleReader = require("../lib/reader").ModuleReader; @@ -22,6 +23,7 @@ var watcher = new Watcher(new ReadFileCache(sourceDir), false); // Get a new context. Defaults to setRelativize(true) and setUseProvidesModule(true) function getNewContext(options) { + var packageDeps = Object.keys(require(findup("package.json")).dependencies); var context = new BuildContext({ config: { debug: options.debug }, sourceDir: sourceDir @@ -29,7 +31,7 @@ function getNewContext(options) { context.setCacheDirectory(path.join(outputDir, options.cacheDirectory)); context.setRelativize(options.relative === undefined || options.relative); context.setUseProvidesModule(options.useProvidesModule === undefined || options.useProvidesModule ); - context.setIgnorePatterns(options.ignorePatterns || [ /ignored/, /^react[\/$]/ ]); + context.setIgnorePatterns(options.ignorePatterns || [ /ignored/, /^react[\/$]/, new RegExp("^(" + packageDeps.join('|') + ")(\\/|$)") ]); return context; } @@ -80,6 +82,8 @@ function checkHome(assert, home) { assert.strictEqual(home.source.indexOf('require("./assert");'), 0); assert.notEqual(home.source.indexOf('require("ignored-module");'), -1); assert.notEqual(home.source.indexOf('require("react/addons");'), -1); + assert.notEqual(home.source.indexOf('require("recast");'), -1); + assert.notEqual(home.source.indexOf('require("recast/lib/types");'), -1); return home; }).invoke("getRequiredP").then(function(reqs) { assert.strictEqual(reqs.length, 1); diff --git a/test/source/home.js b/test/source/home.js index ca00fd1..784fb16 100644 --- a/test/source/home.js +++ b/test/source/home.js @@ -5,4 +5,7 @@ require("./tests/../assert"); require("ignored-module"); require("react/addons"); // also ignored +require("recast"); // defined as dependency in package.json +require("recast/lib/types"); + exports.name = "home"; From 4c5ef142ecf32886b5e77366c507f558b00a29c7 Mon Sep 17 00:00:00 2001 From: martinandert Date: Mon, 23 Mar 2015 01:03:32 +0100 Subject: [PATCH 4/6] adds cli flag to ignore Node's built-in modules ('fs', 'events', etc.) --- README.md | 1 + lib/commoner.js | 10 +++++++--- lib/util.js | 17 +++++++++++++++++ test/run.js | 11 +++++------ test/source/assert.js | 7 ------- test/source/home.js | 8 +++++--- test/source/myassert.js | 7 +++++++ test/source/widget/follow.js | 6 +++--- 8 files changed, 45 insertions(+), 22 deletions(-) delete mode 100644 test/source/assert.js create mode 100644 test/source/myassert.js diff --git a/README.md b/README.md index 6a0d80f..3ea9d8d 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Options: --relativize Rewrite all module identifiers to be relative --follow-requires Scan modules for required dependencies --ignore-dependencies Ignore modules defined as dependencies in package.json + --ignore-node-core Ignore Node's core modules ('fs', 'events', etc.) --cache-dir Alternate directory to use for disk cache --no-cache-dir Disable the disk cache --source-charset Charset of source (default: utf8) diff --git a/lib/commoner.js b/lib/commoner.js index 7c07e43..29055cc 100644 --- a/lib/commoner.js +++ b/lib/commoner.js @@ -3,7 +3,6 @@ var path = require("path"); var fs = require("fs"); var Q = require("q"); var iconv = require("iconv-lite"); -var findup = require('findup-sync'); var ReadFileCache = require("./cache").ReadFileCache; var Watcher = require("./watcher").Watcher; var contextModule = require("./context"); @@ -138,8 +137,11 @@ Cp.buildP = function(options, roots) { context.setUseProvidesModule(self.useProvidesModule); if (self.ignoreDependencies) { - var dependencies = Object.keys(require(findup("package.json")).dependencies); - self.ignorePatterns.push(new RegExp("^(" + dependencies.join('|') + ")(\\/|$)")); + self.ignorePatterns.push(util.makeDepsIgnorePattern()); + } + + if (self.ignoreNodeCore) { + self.ignorePatterns.push(util.makeCoreIgnorePattern()); } context.setIgnorePatterns(self.ignorePatterns); @@ -232,6 +234,7 @@ function cliBuildP(commoner, version) { .option("--relativize", "Rewrite all module identifiers to be relative") .option("--follow-requires", "Scan modules for required dependencies") .option("--ignore-dependencies", "Ignore modules defined as dependencies in package.json") + .option("--ignore-node-core", "Ignore Node's core modules ('fs', 'events', etc.)") .option("--use-provides-module", "Respect @providesModules pragma in files") .option("--cache-dir ", "Alternate directory to use for disk cache") .option("--no-cache-dir", "Disable the disk cache") @@ -254,6 +257,7 @@ function cliBuildP(commoner, version) { commoner.watch = options.watch; commoner.followRequires = options.followRequires; commoner.ignoreDependencies = options.ignoreDependencies; + commoner.ignoreNodeCore = options.ignoreNodeCore; commoner.relativize = options.relativize; commoner.useProvidesModule = options.useProvidesModule; commoner.sourceCharset = normalizeCharset(options.sourceCharset); diff --git a/lib/util.js b/lib/util.js index c6070e9..a248761 100644 --- a/lib/util.js +++ b/lib/util.js @@ -5,6 +5,7 @@ var Q = require("q"); var createHash = require("crypto").createHash; var mkdirp = require("mkdirp"); var iconv = require("iconv-lite"); +var findup = require('findup-sync'); var Ap = Array.prototype; var slice = Ap.slice; var join = Ap.join; @@ -368,3 +369,19 @@ function camelize(hyphenated) { }); } exports.camelize = camelize; + +function makeIgnorePattern(modules) { + return new RegExp("^(" + modules.join('|') + ")(\\/|$)"); +} +exports.makeIgnorePattern = makeIgnorePattern; + +function makeDepsIgnorePattern() { + var deps = Object.keys(require(findup("package.json")).dependencies); + return makeIgnorePattern(deps); +} +exports.makeDepsIgnorePattern = makeDepsIgnorePattern; + +function makeCoreIgnorePattern() { + return makeIgnorePattern(require("repl")._builtinLibs); +} +exports.makeCoreIgnorePattern = makeCoreIgnorePattern; diff --git a/test/run.js b/test/run.js index af4e07c..0b1aad6 100644 --- a/test/run.js +++ b/test/run.js @@ -1,5 +1,4 @@ var assert = require("assert"); -var findup = require('findup-sync'); var Watcher = require("../lib/watcher").Watcher; var BuildContext = require("../lib/context").BuildContext; var ModuleReader = require("../lib/reader").ModuleReader; @@ -23,7 +22,6 @@ var watcher = new Watcher(new ReadFileCache(sourceDir), false); // Get a new context. Defaults to setRelativize(true) and setUseProvidesModule(true) function getNewContext(options) { - var packageDeps = Object.keys(require(findup("package.json")).dependencies); var context = new BuildContext({ config: { debug: options.debug }, sourceDir: sourceDir @@ -31,7 +29,7 @@ function getNewContext(options) { context.setCacheDirectory(path.join(outputDir, options.cacheDirectory)); context.setRelativize(options.relative === undefined || options.relative); context.setUseProvidesModule(options.useProvidesModule === undefined || options.useProvidesModule ); - context.setIgnorePatterns(options.ignorePatterns || [ /ignored/, /^react[\/$]/, new RegExp("^(" + packageDeps.join('|') + ")(\\/|$)") ]); + context.setIgnorePatterns(options.ignorePatterns || [ /ignored/, /^react[\/$]/, util.makeDepsIgnorePattern(), util.makeCoreIgnorePattern() ]); return context; } @@ -79,15 +77,16 @@ function checkHome(assert, home) { assert.strictEqual(home.id, "home"); assert.strictEqual(typeof home.source, "string"); assert.notEqual(home.source.indexOf("exports"), -1); - assert.strictEqual(home.source.indexOf('require("./assert");'), 0); + assert.strictEqual(home.source.indexOf('require("./myassert");'), 0); assert.notEqual(home.source.indexOf('require("ignored-module");'), -1); assert.notEqual(home.source.indexOf('require("react/addons");'), -1); assert.notEqual(home.source.indexOf('require("recast");'), -1); assert.notEqual(home.source.indexOf('require("recast/lib/types");'), -1); + assert.notEqual(home.source.indexOf('require("fs");'), -1); return home; }).invoke("getRequiredP").then(function(reqs) { assert.strictEqual(reqs.length, 1); - assert.strictEqual(reqs[0].id, "assert"); + assert.strictEqual(reqs[0].id, "myassert"); }); } @@ -429,7 +428,7 @@ describe("canonical module identifiers", function() { ), 2); assert.strictEqual(strCount( - 'require("../assert")', + 'require("../myassert")', follow.source ), 2); }); diff --git a/test/source/assert.js b/test/source/assert.js deleted file mode 100644 index 781b6a3..0000000 --- a/test/source/assert.js +++ /dev/null @@ -1,7 +0,0 @@ -function assert(test, msg) { - if (!test) { - throw new Error(msg); - } -} - -module.exports = assert.ok = assert; diff --git a/test/source/home.js b/test/source/home.js index 784fb16..ace4176 100644 --- a/test/source/home.js +++ b/test/source/home.js @@ -1,6 +1,6 @@ -require("assert"); -require("./assert"); -require("./tests/../assert"); +require("myassert"); +require("./myassert"); +require("./tests/../myassert"); require("ignored-module"); require("react/addons"); // also ignored @@ -8,4 +8,6 @@ require("react/addons"); // also ignored require("recast"); // defined as dependency in package.json require("recast/lib/types"); +require("fs"); // node built-in + exports.name = "home"; diff --git a/test/source/myassert.js b/test/source/myassert.js new file mode 100644 index 0000000..0a1a2e7 --- /dev/null +++ b/test/source/myassert.js @@ -0,0 +1,7 @@ +function myassert(test, msg) { + if (!test) { + throw new Error(msg); + } +} + +module.exports = myassert.ok = myassert; diff --git a/test/source/widget/follow.js b/test/source/widget/follow.js index 95b2ae7..c384b12 100644 --- a/test/source/widget/follow.js +++ b/test/source/widget/follow.js @@ -9,9 +9,9 @@ require("../WidgetShare"); require("../widget/gallery"); require("./gallery"); -// These both become "../assert". -require("assert"); -require("../assert"); +// These both become "../myassert". +require("myassert"); +require("../myassert"); // These circular references should both become "./follow". require("./follow"); From 79d0ca9afa0b3ead1199a05ee8f0776b798d8037 Mon Sep 17 00:00:00 2001 From: martinandert Date: Mon, 23 Mar 2015 01:09:45 +0100 Subject: [PATCH 5/6] fix whitespace --- lib/reader.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/reader.js b/lib/reader.js index 7eea289..fb457c6 100644 --- a/lib/reader.js +++ b/lib/reader.js @@ -221,7 +221,6 @@ ModuleReader.prototype = { if (ids.length === 0) return ids; // Shortcut. - if (ignorePatterns.length) { ids = ids.filter(function(id) { for (var i = 0; i < ignorePatterns.length; i++) { From d8b8703feab25d059443c177c4e52efbb69ff90f Mon Sep 17 00:00:00 2001 From: martinandert Date: Wed, 1 Apr 2015 21:39:28 +0200 Subject: [PATCH 6/6] add devDependencies to ignore-dependencies --- lib/util.js | 6 ++++-- test/run.js | 1 + test/source/home.js | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/util.js b/lib/util.js index a248761..cb4c0b3 100644 --- a/lib/util.js +++ b/lib/util.js @@ -376,8 +376,10 @@ function makeIgnorePattern(modules) { exports.makeIgnorePattern = makeIgnorePattern; function makeDepsIgnorePattern() { - var deps = Object.keys(require(findup("package.json")).dependencies); - return makeIgnorePattern(deps); + var packageInfo = require(findup("package.json")); + var deps = Object.keys(packageInfo.dependencies || {}); + var devDeps = Object.keys(packageInfo.devDependencies || {}); + return makeIgnorePattern(deps.concat(devDeps)); } exports.makeDepsIgnorePattern = makeDepsIgnorePattern; diff --git a/test/run.js b/test/run.js index 0b1aad6..49dc0a2 100644 --- a/test/run.js +++ b/test/run.js @@ -82,6 +82,7 @@ function checkHome(assert, home) { assert.notEqual(home.source.indexOf('require("react/addons");'), -1); assert.notEqual(home.source.indexOf('require("recast");'), -1); assert.notEqual(home.source.indexOf('require("recast/lib/types");'), -1); + assert.notEqual(home.source.indexOf('require("mocha");'), -1); assert.notEqual(home.source.indexOf('require("fs");'), -1); return home; }).invoke("getRequiredP").then(function(reqs) { diff --git a/test/source/home.js b/test/source/home.js index ace4176..d4a04f8 100644 --- a/test/source/home.js +++ b/test/source/home.js @@ -7,6 +7,7 @@ require("react/addons"); // also ignored require("recast"); // defined as dependency in package.json require("recast/lib/types"); +require("mocha"); // a dev dependency require("fs"); // node built-in