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,
|
||||
resource,
|
||||
resourceResolveData,
|
||||
settings,
|
||||
type,
|
||||
parser: this.getParser(type, settings.parser),
|
||||
resolveOptions
|
||||
|
|
|
@ -24,6 +24,12 @@ class SideEffectsFlagPlugin {
|
|||
|
||||
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) => {
|
||||
compilation.hooks.optimizeDependencies.tap("SideEffectsFlagPlugin", (modules) => {
|
||||
|
|
|
@ -872,6 +872,10 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"sideEffects": {
|
||||
"description": "Flags a module as with or without side effects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"query": {
|
||||
"description": "Shortcut for use.query",
|
||||
"anyOf": [
|
||||
|
|
|
@ -174,7 +174,7 @@ describe("Validation", () => {
|
|||
},
|
||||
message: [
|
||||
" - 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"
|
||||
]
|
||||
}, {
|
||||
|
|
|
@ -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