javascript - 如何在 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
编译器的选项,但没有骰子。
这似乎是一件简单的事情,但我也没有通过广泛的谷歌搜索找到解决方案。谁能告诉我我错过了什么?
解决方案
我重新创建了您的文件(注意区别):
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 包。
推荐阅读
- java - 用于发送电子邮件附件的文件提供程序不断崩溃
- java - Musicg 库不适用于 mp3 、 rm 、 wma
- scala - 如何为我的自定义 mutable.HashMap 编写自定义方法 ++=
- swift - 如何在 Firestore (SWIFT) 中使用 FieldValue 减少值?
- python - JQuery .append() 到单个 forloop Python Django 中的多个位置
- c# - 如何使用 linq 在 C# 中管理库存水平
- javascript - 为什么等待和异步有效的变量名?
- sql - ALTER TABLE DROP INDEX 在未优化内存的表上失败
- solr - 在 Solr 中将一些文档从一个集合移动到另一个集合
- django - 如何公开 docker 容器以访问主机数据库?