javascript - 有什么方法可以在节点中使用 require 和 import
问题描述
我在节点项目中有两个不同的文件,在其中一个中,我必须使用 json 文件来提取数组,我使用的是 require。在另一个中,我必须从模块中导入一些功能。问题是,如果我没有,导入将不起作用
"type" : "module"
在我的 package.json 中,但是这样做,要求不起作用。我尝试使用 json 文件更改导入的要求,但要执行,我必须使用
node --experimental-json-modules file.js
我们假设在运行时不使用该标志。
解决方案
你应该选择require()
或import
- 不是两者兼而有之。在 ESM 模块中(您可以使用import
)时,require()
未定义。如果要import
用于加载模块,请"type": "module"
正确设置并使用import
. 然后,要加载一个 JSON 文件,只需要一个小函数:
async function loadJSON(file) {
let data = await fs.promises.readFile(file);
return JSON.parse(data);
}
或者,如果您想同步执行此操作:
function loadJSONSync(file) {
let data = fs.readFileSync(file);
return JSON.parse(data);
}
您可以将其放入共享模块本身,以便您可以在任何地方使用它。请注意,在这两个函数中,您都需要捕获错误。使用异步选项,它返回一个承诺,您需要检查成功和拒绝。对于同步版本,您需要捕获它可能抛出的任何异常。
推荐阅读
- ios - RealmJS:clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- javascript - 使用 JavaScript 将 SharePoint 文档库文件输出到 CSV 文件
- javascript - 如何在打开的其他窗口之上显示一个窗口
- python - 运行 docker image 时出现“无法分配内存”错误
- excel - 从整数数组中删除元素
- python - 使用嵌套字典获取类型错误
- php - 日期选择器代码点火器 - PHP
- python - 如何检索名称遵循模式的列的最大时间增量
- ruby - 使用 ruby http 响应时“readbody”的含义
- c# - 使用scrapy sharp登录