首页 > 解决方案 > 如何在 Google Closure Compiler 中指定 ES6 导入的路径?

问题描述

import使用最新版本的 Closure Compiler,无论我如何在语句中指定模块的路径,我似乎都无法加载 ES6 模块。

为了测试这一点,我在同一个目录中创建了两个非常简单的文件。

defaults.js:

const defaults = {color: "#F44336"}
export {defaults}

测试.js:

import {defaults} from 'defaults.js'
console.log(defaults.color)

当我只运行 test.js 而没有尝试使用 Closure Compiler 处理它时,它会按预期工作并导入模块。但是尝试编译它会产生错误:

test.js:1:0: ERROR - [JSC_JS_MODULE_LOAD_WARNING] Failed to load module "defaults"

这是我正在使用的命令行:

compiler \
--module_resolution NODE \
--compilation_level ADVANCED \
--language_in ECMASCRIPT_2020 \
--language_out ECMASCRIPT_2020 \
--js test.js

我尝试将 test.js 中模块文件的路径指定为完全限定的绝对路径,以及各种形式的相对路径,但没有任何效果。我还尝试添加模块文件作为--js编译器的选项,但没有骰子。

这似乎是一件简单的事情,但我也没有通过广泛的谷歌搜索找到解决方案。谁能告诉我我错过了什么?

标签: javascriptecmascript-6es6-modulesgoogle-closure-compiler

解决方案


我重新创建了您的文件(注意区别):

defaults.js

const defaults = {color: "#F44336"}
export {defaults}

测试.js

import {defaults} from './defaults.js' // relative path!
console.log(defaults.color)

汇编

必须指定编译中涉及的所有文件--js

$ cc --module_resolution NODE --compilation_level ADVANCED --js defaults.js --js test.js
console.log("#F44336");

cc只是我的 Closure 编译器副本的别名


附录

我很确定你最大的错误是:

import {defaults} from 'defaults.js'

这永远不会将文件加载到磁盘上,而是寻找defaults.js在您的依赖项中调用的 NPM 包。


推荐阅读