我们正在尝试使用 Node.js 导出和导入 ES6 模块的新方法。对于我们来说,从package.json
文件。下面的代码应该做到这一点:
import {name, version} from '../../package.json'
但是,执行时会抛出以下错误:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json" for T:\ICP\package.json imported from T:\ICP\src\controllers\about.js
我们还缺少什么吗?
是否是扩展名.json
不支持?
是否有其他方法可以使用 Node.js 13+ 检索此信息?
从 Node.js 版本 17.5.0 开始,可以使用以下命令导入 JSON 文件导入断言 https://nodejs.org/api/esm.html#json-modules:
import packageFile from "../../package.json" assert { type: "json" };
const {
name,
version
} = packageFile;
-
assert { type: "json" }
是强制性的
- 解构如
{ name, version }
是不可能的import
直接申报
- JSON 文件的内容作为默认导出导出,因此需要从以下位置导入
default
.
动态导入版本如下所示:
const {
default: {
name,
version
}
} = await import("../../package.json", {
assert: {
type: "json"
}
});
Since 导入断言 https://github.com/tc39/proposal-import-assertions and JSON 模块 https://github.com/tc39/proposal-json-modules最近才升级到第 3 阶段,旧版本的 Node.js 可能支持旧语法。
根据 MDN 上的兼容性表import声明 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#browser_compatibility and dynamic import https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#browser_compatibility,旧版本的 Node.js(16.0.0 – 16.14.0 和 17.0.0 – 17.4.0)有不同的支持:
-
这些版本需要--experimental-json-modules
flag:
node --experimental-json-modules about.js
-
某些版本不支持动态导入断言import
-
部分版本不支持"json"
类型,具体来说
-
某些版本依赖于较旧的提案,该提案未指定assert
语法尚未
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)