在 ES6 Node.js 中导入“.json”扩展会引发错误
Posted
技术标签:
【中文标题】在 ES6 Node.js 中导入“.json”扩展会引发错误【英文标题】:Import '.json' extension in ES6 Node.js throws an error 【发布时间】:2020-05-29 01:07:32 【问题描述】:我们正在尝试使用 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+ 检索此信息吗?
【问题讨论】:
那个路径下有json文件吗?您是否尝试过其他导入方式,例如import pkg from ('../../package.json')
?
是的,.json
文件位置正确。
【参考方案1】:
根据Node.js ES Modules docs--experimental-json-modules。是导入 JSON 文件所必需的。
包含 --experimental-json-modules 标志以使模块正常工作。
node --experimental-json-modules about.js
【讨论】:
Hii Idder,即使我在添加标志后也遇到了同样的错误。 yarn run dev --experimental-json-modules 是用来运行我的项目的脚本 但是每次都添加那个标志很烦人。可以永久设置吗? @Kokodoko 您可以将标志添加到 package.json 中的启动脚本之一。【参考方案2】:您可以在 Node.js 的 ES6 模块中导入 require
:
import createRequire from "module"; // Bring in the ability to create the 'require' method
const require = createRequire(import.meta.url); // construct the require method
const my_json_file = require("path/to/json/your-json-file.json") // use the require method
【讨论】:
Node.Js v15 lastest 给我这个错误ReferenceError: require is not defined
@CAlonsoCORtega 我们正在我的答案的第 2 行创建require
。如果未定义,则您必须跳过前几行。【参考方案3】:
您可以像在文档node-js 中那样使用它,如下所示:
import readFile from 'fs/promises';
const json = JSON.parse(await readFile(new URL('../../package.json', import.meta.url)));
【讨论】:
如果您在服务器上执行此操作...我强烈推荐清洁器fs-extra
,它透明地承诺一切并支持递归目录复制
eslint 对此抛出错误,因为 await
关键字只能在 async
函数中使用【参考方案4】:
是的,还有另一种获取版本的方法,但它没有ES6
模块系统。这是一个工作示例:https://codesandbox.io/s/funny-banzai-2xgvf。
【讨论】:
Require 不是你提到的ES6
,所以它不是我们要找的。span>
【参考方案5】:
尝试使用
process.env.npm_package_version
this might help you
【讨论】:
这只有在应用程序以npm
启动时才有效,但并非总是如此。
您是否尝试使用 fs 加载文件?
这似乎是一种不好的做法,因为它加载了完整的文件,其中显示了使应用程序容易受到攻击的依赖项和其他信息。
这个功能可能会被删除...由于提到的安全问题,以及缺乏对 deno 和 qbrt 的支持以上是关于在 ES6 Node.js 中导入“.json”扩展会引发错误的主要内容,如果未能解决你的问题,请参考以下文章