closure-compiler
closure-compiler copied to clipboard
Compiler crash for dynamic imports importing goog.module
a.js
goog.module('a');
import('./b.js').then(out => {
console.log(out.b);
});
b.js
goog.module('b');
/** @type {number} */
exports.b = 1;
compiler flags
--language_in=ECMASCRIPT_2020
--language_out=ECMASCRIPT_2020
--chunk_output_type=ES_MODULES
--emit_use_strict=false
--js=b.js
--chunk=b_out:1
--js=a.js
--chunk=a_out:1:b_out
Then the compiler crashes with a message to report it.
On a related note, I have a question: Is dynamic import supposed to work in goog.module? Or is it supposed to use some other Closure Library function to achieve on-demand loading of other goog.modules?
Dynamic import can not import a goog.module. It must be a ES6 module.
Can you provide the stack trace that you see with the crash?
java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
null
Node(DYNAMIC_IMPORT): a.js:1:0
import('./b.js').then(out => {
Parent(GETPROP then): a.js:1:17
import('./b.js').then(out => {
at com.google.javascript.jscomp.ClosureRewriteModule.getBinaryModuleNamespace(ClosureRewriteModule.java:328)
at com.google.javascript.jscomp.ModuleRenaming$GlobalizedModuleName.create(ModuleRenaming.java:213)
at com.google.javascript.jscomp.RewriteDynamicImports.visit(RewriteDynamicImports.java:128)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:872)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1000)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:868)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1000)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:868)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1000)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:868)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1000)
at com.google.javascript.jscomp.NodeTraversal.handleScript(NodeTraversal.java:780)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:832)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1000)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:868)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:459)
at com.google.javascript.jscomp.NodeTraversal.access$200(NodeTraversal.java:38)
at com.google.javascript.jscomp.NodeTraversal$Builder.traverse(NodeTraversal.java:398)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:468)
at com.google.javascript.jscomp.RewriteDynamicImports.process(RewriteDynamicImports.java:94)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:317)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:232)
at com.google.javascript.jscomp.Compiler.check(Compiler.java:1062)
at com.google.javascript.jscomp.Compiler.performChecksAndTranspilation(Compiler.java:860)
at com.google.javascript.jscomp.Compiler.lambda$stage1Passes$4(Compiler.java:792)
at com.google.javascript.jscomp.CompilerExecutor.lambda$runInCompilerThread$0(CompilerExecutor.java:101)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.lang.Thread.run(Thread.java:834)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
Caused by: java.lang.NullPointerException
... 32 more
@ChadKillingsworth to comment.
Well the compiler definitely shouldn't crash - I can look at that. I'm going to have to do some research though about how ES Module imports work with goog.module. Specifically, what would import * as modNs from '/path/to/goog/module.js' work?