Skip to content

Commit

Permalink
fix(linker): add missing esm flag
Browse files Browse the repository at this point in the history
fix #1333 #1323

Signed-off-by: Liu Bowen <mr_lbw@outlook.com>
  • Loading branch information
lbwa committed Jun 1, 2021
1 parent 35c263f commit af8bcd0
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 21 deletions.
11 changes: 7 additions & 4 deletions internal/bundler/linker.go
Expand Up @@ -1726,10 +1726,11 @@ func (c *linkerContext) createExportsForFile(sourceIndex uint32) {
}
}

// Prefix this part with "var exports = {}" if this isn't a CommonJS module
// Prefix this part with "var exports = { __esModule: true }" if this isn't a CommonJS module
declaredSymbols := []js_ast.DeclaredSymbol{}
var nsExportStmts []js_ast.Stmt
if repr.AST.ExportsKind != js_ast.ExportsCommonJS && (!file.IsEntryPoint() || c.options.OutputFormat != config.FormatCommonJS) {
isNotCommonJSAndEntry := repr.AST.ExportsKind != js_ast.ExportsCommonJS && (!file.IsEntryPoint() || c.options.OutputFormat != config.FormatCommonJS)
if isNotCommonJSAndEntry {
nsExportStmts = append(nsExportStmts, js_ast.Stmt{Data: &js_ast.SLocal{Decls: []js_ast.Decl{{
Binding: js_ast.Binding{Data: &js_ast.BIdentifier{Ref: repr.AST.ExportsRef}},
ValueOrNil: js_ast.Expr{Data: &js_ast.EObject{}},
Expand All @@ -1744,8 +1745,10 @@ func (c *linkerContext) createExportsForFile(sourceIndex uint32) {
// "__markAsModule" which sets the "__esModule" property to true. This must
// be done before any to "require()" or circular imports of multiple modules
// that have been each converted from ESM to CommonJS may not work correctly.
if repr.AST.ExportKeyword.Len > 0 && (repr.AST.ExportsKind == js_ast.ExportsCommonJS ||
(file.IsEntryPoint() && c.options.OutputFormat == config.FormatCommonJS)) {
if (repr.AST.ExportKeyword.Len > 0 &&
(repr.AST.ExportsKind == js_ast.ExportsCommonJS ||
(file.IsEntryPoint() && c.options.OutputFormat == config.FormatCommonJS))) ||
isNotCommonJSAndEntry {
runtimeRepr := c.graph.Files[runtime.SourceIndex].InputFile.Repr.(*graph.JSRepr)
markAsModuleRef := runtimeRepr.AST.ModuleScope.Members["__markAsModule"].Ref
nsExportStmts = append(nsExportStmts, js_ast.Stmt{Data: &js_ast.SExpr{Value: js_ast.Expr{Data: &js_ast.ECall{
Expand Down
7 changes: 7 additions & 0 deletions internal/bundler/snapshots/snapshots_dce.txt
Expand Up @@ -145,6 +145,7 @@ TestPackageJsonSideEffectsArrayKeepMainImplicitMain
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-main.js
var index_main_exports = {};
__markAsModule(index_main_exports);
__export(index_main_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -191,6 +192,7 @@ TestPackageJsonSideEffectsArrayKeepModuleImplicitMain
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-main.js
var index_main_exports = {};
__markAsModule(index_main_exports);
__export(index_main_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -258,6 +260,7 @@ var init_b = __esm({

// Users/user/project/node_modules/a/index.js
var a_exports = {};
__markAsModule(a_exports);
__export(a_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -345,6 +348,7 @@ TestPackageJsonSideEffectsFalseKeepBareImportAndRequireES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var demo_pkg_exports = {};
__markAsModule(demo_pkg_exports);
__export(demo_pkg_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -405,6 +409,7 @@ TestPackageJsonSideEffectsFalseKeepStarImportES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var demo_pkg_exports = {};
__markAsModule(demo_pkg_exports);
__export(demo_pkg_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -450,6 +455,7 @@ var init_b = __esm({

// Users/user/project/node_modules/a/index.js
var a_exports = {};
__markAsModule(a_exports);
__export(a_exports, {
foo: () => foo
});
Expand Down Expand Up @@ -678,6 +684,7 @@ var init_lib = __esm({

// cjs.js
var cjs_exports = {};
__markAsModule(cjs_exports);
__export(cjs_exports, {
default: () => cjs_default
});
Expand Down
46 changes: 37 additions & 9 deletions internal/bundler/snapshots/snapshots_default.txt
Expand Up @@ -244,6 +244,7 @@ TestCommonJSFromES6
---------- /out.js ----------
// foo.js
var foo_exports = {};
__markAsModule(foo_exports);
__export(foo_exports, {
foo: () => foo
});
Expand All @@ -257,6 +258,7 @@ var init_foo = __esm({

// bar.js
var bar_exports = {};
__markAsModule(bar_exports);
__export(bar_exports, {
bar: () => bar
});
Expand Down Expand Up @@ -492,6 +494,7 @@ TestEmptyExportClauseBundleAsCommonJSIssue910
---------- /out.js ----------
// types.mjs
var types_exports = {};
__markAsModule(types_exports);
var init_types = __esm({
"types.mjs"() {
}
Expand Down Expand Up @@ -548,6 +551,7 @@ var init_a = __esm({

// b.js
var b_exports = {};
__markAsModule(b_exports);
__export(b_exports, {
xyz: () => xyz
});
Expand All @@ -560,6 +564,7 @@ var init_b = __esm({

// commonjs.js
var commonjs_exports = {};
__markAsModule(commonjs_exports);
__export(commonjs_exports, {
C: () => Class,
Class: () => Class,
Expand Down Expand Up @@ -589,6 +594,7 @@ var init_commonjs = __esm({

// c.js
var c_exports = {};
__markAsModule(c_exports);
__export(c_exports, {
default: () => c_default2
});
Expand All @@ -603,6 +609,7 @@ var init_c = __esm({

// d.js
var d_exports = {};
__markAsModule(d_exports);
__export(d_exports, {
default: () => d_default
});
Expand All @@ -618,6 +625,7 @@ var init_d = __esm({

// e.js
var e_exports = {};
__markAsModule(e_exports);
__export(e_exports, {
default: () => e_default
});
Expand All @@ -630,6 +638,7 @@ var init_e = __esm({

// f.js
var f_exports = {};
__markAsModule(f_exports);
__export(f_exports, {
default: () => foo
});
Expand All @@ -643,6 +652,7 @@ var init_f = __esm({

// g.js
var g_exports = {};
__markAsModule(g_exports);
__export(g_exports, {
default: () => g_default
});
Expand All @@ -655,6 +665,7 @@ var init_g = __esm({

// h.js
var h_exports = {};
__markAsModule(h_exports);
__export(h_exports, {
default: () => foo2
});
Expand Down Expand Up @@ -683,6 +694,7 @@ var abc = void 0;

// b.js
var b_exports = {};
__markAsModule(b_exports);
__export(b_exports, {
xyz: () => xyz
});
Expand Down Expand Up @@ -715,6 +727,7 @@ TestExportFormsIIFE
var globalName = (() => {
// entry.js
var entry_exports = {};
__markAsModule(entry_exports);
__export(entry_exports, {
C: () => Class,
Class: () => Class,
Expand All @@ -732,6 +745,7 @@ var globalName = (() => {

// b.js
var b_exports = {};
__markAsModule(b_exports);
__export(b_exports, {
xyz: () => xyz
});
Expand Down Expand Up @@ -802,13 +816,15 @@ TestExportsAndModuleFormatCommonJS
---------- /out.js ----------
// foo/test.js
var test_exports = {};
__markAsModule(test_exports);
__export(test_exports, {
foo: () => foo
});
var foo = 123;

// bar/test.js
var test_exports2 = {};
__markAsModule(test_exports2);
__export(test_exports2, {
bar: () => bar
});
Expand All @@ -822,6 +838,7 @@ TestExternalES6ConvertedToCommonJS
---------- /out.js ----------
// a.js
var a_exports = {};
__markAsModule(a_exports);
__export(a_exports, {
ns: () => ns
});
Expand All @@ -833,6 +850,7 @@ var init_a = __esm({

// b.js
var b_exports = {};
__markAsModule(b_exports);
__export(b_exports, {
ns: () => ns2
});
Expand All @@ -844,6 +862,7 @@ var init_b = __esm({

// c.js
var c_exports = {};
__markAsModule(c_exports);
__export(c_exports, {
ns: () => ns3
});
Expand All @@ -855,6 +874,7 @@ var init_c = __esm({

// d.js
var d_exports = {};
__markAsModule(d_exports);
__export(d_exports, {
ns: () => ns4
});
Expand All @@ -866,6 +886,7 @@ var init_d = __esm({

// e.js
var e_exports = {};
__markAsModule(e_exports);
import * as x_star from "x";
var init_e = __esm({
"e.js"() {
Expand Down Expand Up @@ -1815,21 +1836,23 @@ import("foo");import(foo());
TestMinifiedExportsAndModuleFormatCommonJS
---------- /out.js ----------
// foo/test.js
var o = {};
s(o, {
foo: () => p
var t = {};
f(t);
p(t, {
foo: () => l
});
var p = 123;
var l = 123;

// bar/test.js
var t = {};
s(t, {
bar: () => l
var r = {};
f(r);
p(r, {
bar: () => m
});
var l = 123;
var m = 123;

// entry.js
console.log(exports, module.exports, o, t);
console.log(exports, module.exports, t, r);

================================================================================
TestMinifyArguments
Expand Down Expand Up @@ -2866,6 +2889,7 @@ var require_cjs = __commonJS({

// dummy.js
var dummy_exports = {};
__markAsModule(dummy_exports);
__export(dummy_exports, {
dummy: () => dummy
});
Expand Down Expand Up @@ -3132,6 +3156,7 @@ TestTopLevelAwaitAllowedImportWithoutSplitting
---------- /out.js ----------
// c.js
var c_exports = {};
__markAsModule(c_exports);
var init_c = __esm({
async "c.js"() {
await 0;
Expand All @@ -3140,6 +3165,7 @@ var init_c = __esm({

// b.js
var b_exports = {};
__markAsModule(b_exports);
var init_b = __esm({
async "b.js"() {
await init_c();
Expand All @@ -3148,6 +3174,7 @@ var init_b = __esm({

// a.js
var a_exports = {};
__markAsModule(a_exports);
var init_a = __esm({
async "a.js"() {
await init_b();
Expand All @@ -3156,6 +3183,7 @@ var init_a = __esm({

// entry.js
var entry_exports = {};
__markAsModule(entry_exports);
var init_entry = __esm({
async "entry.js"() {
init_a();
Expand Down

0 comments on commit af8bcd0

Please sign in to comment.