Skip to content

Commit d382b10

Browse files
committed
fixed webpack#2570
1 parent 9fce406 commit d382b10

File tree

14 files changed

+53
-23
lines changed

14 files changed

+53
-23
lines changed

lib/MainTemplate.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ function MainTemplate(outputOptions) {
9191
buf.push("// expose the module cache");
9292
buf.push(this.requireFn + ".c = installedModules;");
9393

94+
buf.push("");
95+
buf.push("// identity function for calling harmory imports with the correct context");
96+
buf.push(this.requireFn + ".i = function(value) { return value; };");
97+
9498
var publicPath = this.getPublicPath({
9599
hash: hash
96100
});

lib/dependencies/HarmonyImportSpecifierDependency.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,20 @@ HarmonyImportSpecifierDependency.Template = function HarmonyImportSpecifierDepen
4242
HarmonyImportSpecifierDependency.Template.prototype.apply = function(dep, source) {
4343
var content;
4444
var importedModule = dep.importDependency.module;
45-
if(dep.id === "default" && !(importedModule && importedModule.meta && importedModule.meta.harmonyModule)) {
46-
content = "/* harmony import */" + dep.importedVar + "_default.a";
45+
var defaultImport = dep.id === "default" && !(importedModule && importedModule.meta && importedModule.meta.harmonyModule);
46+
if(defaultImport) {
47+
content = dep.importedVar + "_default.a";
4748
} else if(dep.id) {
4849
var used = importedModule ? importedModule.isUsed(dep.id) : dep.id;
49-
content = "/* harmony import */" + dep.importedVar + "[" + JSON.stringify(used) + "]";
50+
content = dep.importedVar + "[" + JSON.stringify(used) + (dep.id !== used ? " /* " + dep.id + " */" : "") + "]";
5051
} else {
51-
content = "/* harmony namespace import */ " + dep.importedVar;
52+
content = dep.importedVar;
5253
}
5354
if(!dep.call) {
5455
source.replace(dep.range[0], dep.range[1] - 1, content);
55-
} else if(dep.callArgs.length > 0) {
56-
source.replace(dep.range[0], dep.callArgs[0].range[0] - 1, content + ".call(undefined, ");
56+
} else if(defaultImport) {
57+
source.replace(dep.range[0], dep.range[1] - 1, dep.importedVar + "_default()");
5758
} else {
58-
source.replace(dep.call.range[0], dep.call.range[1] - 1, content + ".call()");
59+
source.replace(dep.range[0], dep.range[1] - 1, "__webpack_require__.i(" + content + ")");
5960
}
6061
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default function() { return [].slice.call(arguments); }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import fn from "./fn";
2+
3+
it("should generate valid code when calling a harmony import function with brackets", function() {
4+
var a = fn((1));
5+
var b = fn(2);
6+
var c = fn((3), (4));
7+
var d = fn(5, (6));
8+
9+
a.should.be.eql([1]);
10+
b.should.be.eql([2]);
11+
c.should.be.eql([3, 4]);
12+
d.should.be.eql([5, 6]);
13+
});

test/statsCases/accept-stats.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
var fs = require("fs");
2+
var path = require("path");
3+
var dirs = fs.readdirSync(__dirname);
4+
dirs.forEach(function(dir) {
5+
var actual = path.join(__dirname, dir, "actual.txt");
6+
var expected = path.join(__dirname, dir, "expected.txt");
7+
if(fs.existsSync(actual)) {
8+
fs.unlinkSync(expected);
9+
fs.renameSync(actual, expected);
10+
}
11+
});

test/statsCases/chunks/expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Hash: 55b4e00b04fd0c502b1f
22
Time: Xms
33
Asset Size Chunks Chunk Names
4-
bundle.js 4.64 kB 0 [emitted] main
4+
bundle.js 4.8 kB 0 [emitted] main
55
1.bundle.js 252 bytes 1 [emitted]
66
2.bundle.js 107 bytes 2 [emitted]
77
3.bundle.js 202 bytes 3 [emitted]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Hash: 0fca0b37055d42f98682
22
Time: Xms
3-
Asset Size Chunks Chunk Names
4-
main.js 1.4 kB 0 [emitted] main
3+
Asset Size Chunks Chunk Names
4+
main.js 1.55 kB 0 [emitted] main
55
chunk {0} main.js (main) 0 bytes [rendered]
66
[0] (webpack)/test/statsCases/color-disabled/index.js 0 bytes {0} [built]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Hash: <CLR=BOLD>0fca0b37055d42f98682</CLR>
22
Time: <CLR=BOLD>X</CLR>ms
3-
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=BOLD>Chunk Names</CLR>
4-
<CLR=32>main.js</CLR> 1.4 kB <CLR=BOLD>0</CLR> <CLR=32>[emitted]</CLR> main
3+
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=BOLD>Chunk Names</CLR>
4+
<CLR=32>main.js</CLR> 1.55 kB <CLR=BOLD>0</CLR> <CLR=32>[emitted]</CLR> main
55
chunk {<CLR=33>0</CLR>} <CLR=32>main.js</CLR> (main) 0 bytes<CLR=32> [rendered]</CLR>
66
[0] <CLR=BOLD>(webpack)/test/statsCases/color-enabled-custom/index.js</CLR> 0 bytes {<CLR=33>0</CLR>}<CLR=32> [built]</CLR>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Hash: <CLR=BOLD>0fca0b37055d42f98682</CLR>
22
Time: <CLR=BOLD>X</CLR>ms
3-
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=BOLD>Chunk Names</CLR>
4-
<CLR=32,BOLD>main.js</CLR> 1.4 kB <CLR=BOLD>0</CLR> <CLR=32,BOLD>[emitted]</CLR> main
3+
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=BOLD>Chunk Names</CLR>
4+
<CLR=32,BOLD>main.js</CLR> 1.55 kB <CLR=BOLD>0</CLR> <CLR=32,BOLD>[emitted]</CLR> main
55
chunk {<CLR=33,BOLD>0</CLR>} <CLR=32,BOLD>main.js</CLR> (main) 0 bytes<CLR=32,BOLD> [rendered]</CLR>
66
[0] <CLR=BOLD>(webpack)/test/statsCases/color-enabled/index.js</CLR> 0 bytes {<CLR=33,BOLD>0</CLR>}<CLR=32,BOLD> [built]</CLR>

test/statsCases/define-plugin/expected.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ Hash: 9874287bb38ab21ad7571557d04931c0902dd6cd
22
Child
33
Hash: 9874287bb38ab21ad757
44
Time: Xms
5-
Asset Size Chunks Chunk Names
6-
main.js 1.44 kB 0 [emitted] main
5+
Asset Size Chunks Chunk Names
6+
main.js 1.6 kB 0 [emitted] main
77
chunk {0} main.js (main) 24 bytes [rendered]
88
[0] (webpack)/test/statsCases/define-plugin/index.js 24 bytes {0} [built]
99
Child
1010
Hash: 1557d04931c0902dd6cd
1111
Time: Xms
12-
Asset Size Chunks Chunk Names
13-
main.js 1.44 kB 0 [emitted] main
12+
Asset Size Chunks Chunk Names
13+
main.js 1.6 kB 0 [emitted] main
1414
chunk {0} main.js (main) 24 bytes [rendered]
1515
[0] (webpack)/test/statsCases/define-plugin/index.js 24 bytes {0} [built]

0 commit comments

Comments
 (0)