【问题标题】:How do I specify the path for ES6 import in Google Closure Compiler?如何在 Google Closure Compiler 中指定 ES6 导入的路径?
【发布时间】:2021-06-21 22:37:47
【问题描述】:

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

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

defaults.js:

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

test.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 选项,但没有骰子。

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

【问题讨论】:

  • 你能确认你使用的是什么版本的编译器吗?
  • 最新的Linux版本:v20210601。
  • 我不敢相信我是唯一一个尝试过使用 Closure Compiler 做到这一点的人。

标签: javascript ecmascript-6 es6-modules google-closure-compiler


【解决方案1】:

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

defaults.js

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

test.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 包。

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多