Skip to content

Commit 6bc4585

Browse files
committed
fixed webpack#1840
1 parent 4a9bb29 commit 6bc4585

File tree

5 files changed

+22
-8
lines changed

5 files changed

+22
-8
lines changed

lib/dependencies/HarmonyExportDependencyParserPlugin.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,16 @@ module.exports = AbstractPlugin.create({
3434
},
3535
"export declaration": function() {},
3636
"export specifier": function(statement, id, name) {
37-
var immutable = statement.declaration && isImmutableStatement(statement.declaration);
38-
var hoisted = statement.declaration && isHoistedStatement(statement.declaration);
39-
var dep = new HarmonyExportSpecifierDependency(this.state.module, id, name, hoisted ? 0 : (statement.range[1] + 0.5), immutable);
37+
var rename = this.scope.renames["$" + id];
38+
var dep;
39+
if(rename === "imported var") {
40+
var settings = this.state.harmonySpecifier["$" + id];
41+
dep = new HarmonyExportImportedSpecifierDependency(this.state.module, settings[0], settings[1], settings[2], name, statement.range[1]);
42+
} else {
43+
var immutable = statement.declaration && isImmutableStatement(statement.declaration);
44+
var hoisted = statement.declaration && isHoistedStatement(statement.declaration);
45+
dep = new HarmonyExportSpecifierDependency(this.state.module, id, name, hoisted ? 0 : (statement.range[1] + 0.5), immutable);
46+
}
4047
dep.loc = statement.loc;
4148
this.state.current.addDependency(dep);
4249
return true;

lib/dependencies/HarmonyExportImportedSpecifierDependency.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,15 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep
4848
if(outputOptions.pathinfo) comment = "/*! " + requestShortener.shorten(dep.request) + " */ ";
4949
var content;
5050
if(!used) {
51-
content = "/* unused harmony reexport " + (dep.name || "namespace") + " */;";
51+
content = "/* unused harmony reexport " + (dep.name || "namespace") + " */";
5252
} else if(!active) {
53-
content = "/* inactive harmony reexport " + (dep.name || "namespace") + " */;";
53+
content = "/* inactive harmony reexport " + (dep.name || "namespace") + " */";
5454
} else if(dep.name === "default" && !dep.importDependency.module.meta.harmonyModule) {
5555
content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + name + "_default.a; }});";
56-
} else if(dep.name) {
56+
} else if(dep.name && dep.id) {
5757
content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + (name + "[" + JSON.stringify(dep.id) + "]") + "; }});";
58+
} else if(dep.name) {
59+
content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + name + "; }});";
5860
} else {
5961
var activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule);
6062
content = "/* harmony namespace reexport */ for(var __WEBPACK_IMPORT_KEY__ in " + comment + name + ") ";

lib/dependencies/HarmonyExportSpecifierDependency.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ HarmonyExportSpecifierDependency.Template.prototype.apply = function(dep, source
3333
var active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
3434
var content;
3535
if(!used) {
36-
content = "/* unused harmony export " + (dep.name || "namespace") + " */;";
36+
content = "/* unused harmony export " + (dep.name || "namespace") + " */";
3737
} else if(!active) {
38-
content = "/* inactive harmony export " + (dep.name || "namespace") + " */;";
38+
content = "/* inactive harmony export " + (dep.name || "namespace") + " */";
3939
} else if(dep.immutable) {
4040
content = "/* harmony export */ exports[" + JSON.stringify(dep.name) + "] = " + dep.id + ";";
4141
} else {

test/cases/parsing/harmony/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ it("should import a whole module", function() {
2828
abc.b.should.be.eql("b");
2929
abc.c.should.be.eql("c");
3030
abc.d.c.should.be.eql("c");
31+
abc.e.should.be.eql("c");
3132
var copy = (function(a) { return a; }(abc));
3233
copy.a.should.be.eql("a");
3334
copy.b.should.be.eql("b");
3435
copy.c.should.be.eql("c");
3536
copy.d.c.should.be.eql("c");
37+
copy.e.should.be.eql("c");
3638
(typeof abc).should.be.eql("object");
3739
});
3840

test/cases/parsing/harmony/node_modules/abc.js

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)