在 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”扩展会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ES 模块(Node.js)中导入 JSON 文件

无法在 node.js 中导入模块 [重复]

使用 es6 在 NodeJs 中导入 JSON 文件

如何在 ES6 项目中导入我的 npm 模块?

如何在 ECMAScript 6 中导入 JSON 文件?

在 node.js 中导入 sql 文件并针对 PostgreSQL 执行