mirror of https://github.com/webpack/webpack.git
allow to set sideEffects from rules
This commit is contained in:
parent
44209f6db9
commit
5cbd6b20dd
|
@ -249,6 +249,7 @@ class NormalModuleFactory extends Tapable {
|
||||||
loaders,
|
loaders,
|
||||||
resource,
|
resource,
|
||||||
resourceResolveData,
|
resourceResolveData,
|
||||||
|
settings,
|
||||||
type,
|
type,
|
||||||
parser: this.getParser(type, settings.parser),
|
parser: this.getParser(type, settings.parser),
|
||||||
resolveOptions
|
resolveOptions
|
||||||
|
|
|
@ -24,6 +24,12 @@ class SideEffectsFlagPlugin {
|
||||||
|
|
||||||
return module;
|
return module;
|
||||||
});
|
});
|
||||||
|
nmf.hooks.module.tap("SideEffectsFlagPlugin", (module, data) => {
|
||||||
|
if(data.settings.sideEffects === false)
|
||||||
|
module.factoryMeta.sideEffectFree = true;
|
||||||
|
else if(data.settings.sideEffects === true)
|
||||||
|
module.factoryMeta.sideEffectFree = false;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
compiler.hooks.compilation.tap("SideEffectsFlagPlugin", (compilation) => {
|
compiler.hooks.compilation.tap("SideEffectsFlagPlugin", (compilation) => {
|
||||||
compilation.hooks.optimizeDependencies.tap("SideEffectsFlagPlugin", (modules) => {
|
compilation.hooks.optimizeDependencies.tap("SideEffectsFlagPlugin", (modules) => {
|
||||||
|
|
|
@ -872,6 +872,10 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"sideEffects": {
|
||||||
|
"description": "Flags a module as with or without side effects",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"description": "Shortcut for use.query",
|
"description": "Shortcut for use.query",
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
|
|
|
@ -174,7 +174,7 @@ describe("Validation", () => {
|
||||||
},
|
},
|
||||||
message: [
|
message: [
|
||||||
" - configuration.module.rules[0].oneOf[0] has an unknown property 'paser'. These properties are valid:",
|
" - configuration.module.rules[0].oneOf[0] has an unknown property 'paser'. These properties are valid:",
|
||||||
" object { enforce?, exclude?, include?, issuer?, loader?, loaders?, oneOf?, options?, parser?, resolve?, query?, type?, resource?, resourceQuery?, compiler?, rules?, test?, use? }",
|
" object { enforce?, exclude?, include?, issuer?, loader?, loaders?, oneOf?, options?, parser?, resolve?, sideEffects?, query?, type?, resource?, resourceQuery?, compiler?, rules?, test?, use? }",
|
||||||
" -> A rule"
|
" -> A rule"
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
import { log as plog } from "pmodule/tracker";
|
||||||
|
import { log as nlog } from "nmodule/tracker";
|
||||||
|
import p from "pmodule";
|
||||||
|
import n from "nmodule";
|
||||||
|
|
||||||
|
it("should be able to override side effects", function() {
|
||||||
|
p.should.be.eql("def");
|
||||||
|
n.should.be.eql("def");
|
||||||
|
plog.should.be.eql(["a.js", "b.js", "c.js", "index.js"]);
|
||||||
|
nlog.should.be.eql(["index.js"]);
|
||||||
|
});
|
8
test/configCases/side-effects/side-effects-override/node_modules/nmodule/a.js
generated
vendored
Normal file
8
test/configCases/side-effects/side-effects-override/node_modules/nmodule/a.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
var a = "a";
|
||||||
|
var b = "b";
|
||||||
|
var c = "c";
|
||||||
|
|
||||||
|
export { a, b, c };
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("a.js");
|
8
test/configCases/side-effects/side-effects-override/node_modules/nmodule/b.js
generated
vendored
Normal file
8
test/configCases/side-effects/side-effects-override/node_modules/nmodule/b.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
var x = "x";
|
||||||
|
var y = "y";
|
||||||
|
|
||||||
|
export { x, y };
|
||||||
|
export { z } from "./c";
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("b.js");
|
6
test/configCases/side-effects/side-effects-override/node_modules/nmodule/c.js
generated
vendored
Normal file
6
test/configCases/side-effects/side-effects-override/node_modules/nmodule/c.js
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
var z = "z";
|
||||||
|
|
||||||
|
export { z };
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("c.js");
|
7
test/configCases/side-effects/side-effects-override/node_modules/nmodule/index.js
generated
vendored
Normal file
7
test/configCases/side-effects/side-effects-override/node_modules/nmodule/index.js
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export * from "./a";
|
||||||
|
export { x, y, z } from "./b";
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("index.js");
|
||||||
|
|
||||||
|
export default "def";
|
1
test/configCases/side-effects/side-effects-override/node_modules/nmodule/package.json
generated
vendored
Normal file
1
test/configCases/side-effects/side-effects-override/node_modules/nmodule/package.json
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{}
|
10
test/configCases/side-effects/side-effects-override/node_modules/nmodule/tracker.js
generated
vendored
Normal file
10
test/configCases/side-effects/side-effects-override/node_modules/nmodule/tracker.js
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
export function track(file) {
|
||||||
|
log.push(file);
|
||||||
|
log.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
export var log = [];
|
||||||
|
|
||||||
|
export function reset() {
|
||||||
|
log.length = 0;
|
||||||
|
}
|
8
test/configCases/side-effects/side-effects-override/node_modules/pmodule/a.js
generated
vendored
Normal file
8
test/configCases/side-effects/side-effects-override/node_modules/pmodule/a.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
var a = "a";
|
||||||
|
var b = "b";
|
||||||
|
var c = "c";
|
||||||
|
|
||||||
|
export { a, b, c };
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("a.js");
|
8
test/configCases/side-effects/side-effects-override/node_modules/pmodule/b.js
generated
vendored
Normal file
8
test/configCases/side-effects/side-effects-override/node_modules/pmodule/b.js
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
var x = "x";
|
||||||
|
var y = "y";
|
||||||
|
|
||||||
|
export { x, y };
|
||||||
|
export { z } from "./c";
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("b.js");
|
6
test/configCases/side-effects/side-effects-override/node_modules/pmodule/c.js
generated
vendored
Normal file
6
test/configCases/side-effects/side-effects-override/node_modules/pmodule/c.js
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
var z = "z";
|
||||||
|
|
||||||
|
export { z };
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("c.js");
|
7
test/configCases/side-effects/side-effects-override/node_modules/pmodule/index.js
generated
vendored
Normal file
7
test/configCases/side-effects/side-effects-override/node_modules/pmodule/index.js
generated
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export * from "./a";
|
||||||
|
export { x, y, z } from "./b";
|
||||||
|
|
||||||
|
import { track } from "./tracker";
|
||||||
|
track("index.js");
|
||||||
|
|
||||||
|
export default "def";
|
3
test/configCases/side-effects/side-effects-override/node_modules/pmodule/package.json
generated
vendored
Normal file
3
test/configCases/side-effects/side-effects-override/node_modules/pmodule/package.json
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"sideEffects": false
|
||||||
|
}
|
10
test/configCases/side-effects/side-effects-override/node_modules/pmodule/tracker.js
generated
vendored
Normal file
10
test/configCases/side-effects/side-effects-override/node_modules/pmodule/tracker.js
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
export function track(file) {
|
||||||
|
log.push(file);
|
||||||
|
log.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
export var log = [];
|
||||||
|
|
||||||
|
export function reset() {
|
||||||
|
log.length = 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
const path = require("path");
|
||||||
|
module.exports = {
|
||||||
|
mode: "production",
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: path.resolve(__dirname, "node_modules/pmodule"),
|
||||||
|
sideEffects: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: path.resolve(__dirname, "node_modules/nmodule"),
|
||||||
|
sideEffects: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue