Skip to content

Commit 5903cc7

Browse files
committed
refactor how critical warnings are reported
1 parent 84506cb commit 5903cc7

15 files changed

Lines changed: 102 additions & 43 deletions

lib/Compilation.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var async = require("async");
77
var Tapable = require("tapable");
88
var EntryModuleNotFoundError = require("./EntryModuleNotFoundError");
99
var ModuleNotFoundError = require("./ModuleNotFoundError");
10-
var CriticalDependenciesWarning = require("./CriticalDependenciesWarning");
10+
var ModuleDependencyWarning = require("./ModuleDependencyWarning");
1111
var Module = require("./Module");
1212
var ArrayMap = require("./ArrayMap");
1313
var Chunk = require("./Chunk");
@@ -184,12 +184,6 @@ Compilation.prototype.addModuleDependencies = function(module, dependencies, bai
184184
}
185185
async.forEach(factories, function(item, callback) {
186186
var dependencies = item[1];
187-
var criticalDependencies = dependencies.filter(function(d) {
188-
return !!d.critical;
189-
});
190-
if(criticalDependencies.length > 0) {
191-
_this.warnings.push(new CriticalDependenciesWarning(module, criticalDependencies));
192-
}
193187

194188
var errorAndCallback = function errorAndCallback(err) {
195189
err.dependencies = dependencies;
@@ -484,6 +478,10 @@ Compilation.prototype.rebuildModule = function(module, thisCallback) {
484478
};
485479

486480
Compilation.prototype.seal = function seal(callback) {
481+
this.applyPlugins("finish-modules", this.modules);
482+
this.modules.forEach(function(m) {
483+
this.reportDependencyWarnings(m, [m]);
484+
}, this);
487485
this.applyPlugins("seal");
488486
this.preparedChunks.sort(function(a, b) {
489487
if(a.name < b.name) return -1;
@@ -589,6 +587,23 @@ Compilation.prototype.sortModules = function sortModules(modules) {
589587
});
590588
};
591589

590+
Compilation.prototype.reportDependencyWarnings = function reportDependencyWarnings(module, blocks) {
591+
var _this = this;
592+
blocks.forEach(function(block) {
593+
block.dependencies.forEach(function(d) {
594+
var warnings = d.getWarnings();
595+
if(warnings) {
596+
warnings.forEach(function(w) {
597+
var warning = new ModuleDependencyWarning(module, w, d.loc);
598+
module.warnings.push(warning);
599+
_this.warnings.push(warning);
600+
});
601+
}
602+
});
603+
_this.reportDependencyWarnings(module, block.blocks);
604+
});
605+
};
606+
592607
Compilation.prototype.addChunk = function addChunk(name, module, loc) {
593608
var chunk;
594609
if(name) {

lib/CriticalDependenciesWarning.js

Lines changed: 0 additions & 25 deletions
This file was deleted.

lib/Dependency.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ Dependency.prototype.getReference = function() {
1818
module: this.module,
1919
importedNames: true, // true: full object, false: only sideeffects/no export, array of strings: the exports with this names
2020
}
21-
}
21+
};
22+
23+
Dependency.prototype.getWarnings = function() {
24+
return null;
25+
};
2226

2327
Dependency.prototype.updateHash = function(hash) {
2428
hash.update((this.module && this.module.id) + "");

lib/ModuleDependencyWarning.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
function ModuleDependencyWarning(module, err, loc) {
6+
Error.call(this);
7+
Error.captureStackTrace(this, ModuleDependencyWarning);
8+
this.name = "ModuleDependencyWarning";
9+
this.message = loc.start.line + ":" + loc.start.column + " ";
10+
this.details = err.stack;
11+
this.message += err.message;
12+
this.origin = this.module = module;
13+
this.error = err;
14+
}
15+
module.exports = ModuleDependencyWarning;
16+
17+
ModuleDependencyWarning.prototype = Object.create(Error.prototype);
18+
ModuleDependencyWarning.prototype.constructor = ModuleDependencyWarning;

lib/dependencies/AMDRequireContextDependency.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Author Tobias Koppers @sokra
44
*/
55
var ContextDependency = require("./ContextDependency");
6+
var CriticalDependencyWarning = require("./CriticalDependencyWarning");
67

78
function AMDRequireContextDependency(request, recursive, regExp, range, valueRange) {
89
ContextDependency.call(this, request, recursive, regExp);
@@ -15,4 +16,12 @@ AMDRequireContextDependency.prototype = Object.create(ContextDependency.prototyp
1516
AMDRequireContextDependency.prototype.constructor = AMDRequireContextDependency;
1617
AMDRequireContextDependency.prototype.type = "amd require context";
1718

19+
AMDRequireContextDependency.prototype.getWarnings = function() {
20+
if(this.critical) {
21+
return [
22+
new CriticalDependencyWarning(this.critical)
23+
];
24+
}
25+
};
26+
1827
AMDRequireContextDependency.Template = require("./ContextDependencyTemplateAsRequireCall");

lib/dependencies/CommonJsRequireContextDependency.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Author Tobias Koppers @sokra
44
*/
55
var ContextDependency = require("./ContextDependency");
6+
var CriticalDependencyWarning = require("./CriticalDependencyWarning");
67

78
function CommonJsRequireContextDependency(request, recursive, regExp, range, valueRange) {
89
ContextDependency.call(this, request, recursive, regExp);
@@ -15,4 +16,12 @@ CommonJsRequireContextDependency.prototype = Object.create(ContextDependency.pro
1516
CommonJsRequireContextDependency.prototype.constructor = CommonJsRequireContextDependency;
1617
CommonJsRequireContextDependency.prototype.type = "cjs require context";
1718

19+
CommonJsRequireContextDependency.prototype.getWarnings = function() {
20+
if(this.critical) {
21+
return [
22+
new CriticalDependencyWarning(this.critical)
23+
];
24+
}
25+
};
26+
1827
CommonJsRequireContextDependency.Template = require("./ContextDependencyTemplateAsRequireCall");
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
function CriticalDependencyWarning(message) {
6+
Error.call(this);
7+
Error.captureStackTrace(this, CriticalDependencyWarning);
8+
this.name = "CriticalDependencyWarning";
9+
this.message = "Critical dependency: " + message;
10+
}
11+
module.exports = CriticalDependencyWarning;
12+
13+
CriticalDependencyWarning.prototype = Object.create(Error.prototype);
14+
CriticalDependencyWarning.prototype.constructor = CriticalDependencyWarning;

lib/dependencies/RequireResolveContextDependency.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Author Tobias Koppers @sokra
44
*/
55
var ContextDependency = require("./ContextDependency");
6+
var CriticalDependencyWarning = require("./CriticalDependencyWarning");
67

78
function RequireResolveContextDependency(request, recursive, regExp, range, valueRange) {
89
ContextDependency.call(this, request, recursive, regExp);
@@ -15,4 +16,12 @@ RequireResolveContextDependency.prototype = Object.create(ContextDependency.prot
1516
RequireResolveContextDependency.prototype.constructor = RequireResolveContextDependency;
1617
RequireResolveContextDependency.prototype.type = "amd require context";
1718

19+
RequireResolveContextDependency.prototype.getWarnings = function() {
20+
if(this.critical) {
21+
return [
22+
new CriticalDependencyWarning(this.critical)
23+
];
24+
}
25+
};
26+
1827
RequireResolveContextDependency.Template = require("./ContextDependencyTemplateAsId");

lib/dependencies/SystemImportContextDependency.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Author Tobias Koppers @sokra
44
*/
55
var ContextDependency = require("./ContextDependency");
6+
var CriticalDependencyWarning = require("./CriticalDependencyWarning");
67

78
function SystemImportContextDependency(request, recursive, regExp, range, valueRange) {
89
ContextDependency.call(this, request, recursive, regExp);
@@ -16,4 +17,12 @@ SystemImportContextDependency.prototype = Object.create(ContextDependency.protot
1617
SystemImportContextDependency.prototype.constructor = SystemImportContextDependency;
1718
SystemImportContextDependency.prototype.type = "System.import context";
1819

20+
SystemImportContextDependency.prototype.getWarnings = function() {
21+
if(this.critical) {
22+
return [
23+
new CriticalDependencyWarning(this.critical)
24+
];
25+
}
26+
};
27+
1928
SystemImportContextDependency.Template = require("./ContextDependencyTemplateAsRequireCall");

test/cases/parsing/browserify/warnings.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)