【问题标题】:Import '.json' extension in ES6 Node.js throws an error在 ES6 Node.js 中导入“.json”扩展会引发错误
【发布时间】: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 文件位置正确。

标签: javascript node.js es6-modules


【解决方案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 的支持
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多