diff --git a/index.js b/index.js index 1cef23c..ad7ec38 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,5 @@ let path = require('path') let extend = require('util')._extend -let cwd = process.cwd() let BASE_ERROR = 'Circular dependency detected:\r\n' class CircularDependencyPlugin { @@ -8,18 +7,20 @@ class CircularDependencyPlugin { this.options = extend({ exclude: new RegExp('$^'), failOnError: false, - onDetected: false + onDetected: false, + cwd: process.cwd() }, options) } apply(compiler) { let plugin = this + let cwd = this.options.cwd compiler.plugin('compilation', (compilation) => { compilation.plugin('optimize-modules', (modules) => { for (let module of modules) { if (module.resource === undefined) { continue } - let maybeCyclicalPathsList = isCyclic(module, module, {}) + let maybeCyclicalPathsList = this.isCyclic(module, module, {}) if (maybeCyclicalPathsList) { // allow consumers to override all behavior with onDetected if (plugin.options.onDetected) { @@ -52,43 +53,45 @@ class CircularDependencyPlugin { }) }) } -} -function isCyclic(initialModule, currentModule, seenModules) { - // Add the current module to the seen modules cache - seenModules[currentModule.debugId] = true + isCyclic(initialModule, currentModule, seenModules) { + let cwd = this.options.cwd - // If the modules aren't associated to resources - // it's not possible to display how they are cyclical - if (!currentModule.resource || !initialModule.resource) { - return false - } + // Add the current module to the seen modules cache + seenModules[currentModule.debugId] = true - // Iterate over the current modules dependencies - for (let dependency of currentModule.dependencies) { - let depModule = dependency.module - if (!depModule) { continue } + // If the modules aren't associated to resources + // it's not possible to display how they are cyclical + if (!currentModule.resource || !initialModule.resource) { + return false + } + + // Iterate over the current modules dependencies + for (let dependency of currentModule.dependencies) { + let depModule = dependency.module + if (!depModule) { continue } - if (depModule.debugId in seenModules) { - if (depModule.debugId === initialModule.debugId) { - // Initial module has a circular dependency - return [ - path.relative(cwd, currentModule.resource), - path.relative(cwd, depModule.resource) - ] + if (depModule.debugId in seenModules) { + if (depModule.debugId === initialModule.debugId) { + // Initial module has a circular dependency + return [ + path.relative(cwd, currentModule.resource), + path.relative(cwd, depModule.resource) + ] + } + // Found a cycle, but not for this module + continue } - // Found a cycle, but not for this module - continue - } - let maybeCyclicalPathsList = isCyclic(initialModule, depModule, seenModules) - if (maybeCyclicalPathsList) { - maybeCyclicalPathsList.unshift(path.relative(cwd, currentModule.resource)) - return maybeCyclicalPathsList + let maybeCyclicalPathsList = this.isCyclic(initialModule, depModule, seenModules) + if (maybeCyclicalPathsList) { + maybeCyclicalPathsList.unshift(path.relative(cwd, currentModule.resource)) + return maybeCyclicalPathsList + } } - } - return false + return false + } } module.exports = CircularDependencyPlugin diff --git a/package-lock.json b/package-lock.json index eb56232..3b1fcfc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,7 @@ { "name": "circular-dependency-plugin", - "version": "4.2.0", + "version": "4.3.0", "lockfileVersion": 1, - "requires": true, "dependencies": { "acorn": { "version": "5.1.1", diff --git a/package.json b/package.json index 275593d..714e34c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "webpack": "^3.5.5" }, "description": "Detect modules with circular dependencies when bundling with webpack.", - "version": "4.2.0", + "version": "4.3.0", "engines": { "node": ">=6.0.0" },