首页 > 解决方案 > 有什么方法可以在节点中使用 require 和 import

问题描述

我在节点项目中有两个不同的文件,在其中一个中,我必须使用 json 文件来提取数组,我使用的是 require。在另一个中,我必须从模块中导入一些功能。问题是,如果我没有,导入将不起作用

"type" : "module"

在我的 package.json 中,但是这样做,要求不起作用。我尝试使用 json 文件更改导入的要求,但要执行,我必须使用

node --experimental-json-modules file.js

我们假设在运行时不使用该标志。

标签: javascriptnode.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);
}

您可以将其放入共享模块本身,以便您可以在任何地方使用它。请注意,在这两个函数中,您都需要捕获错误。使用异步选项,它返回一个承诺,您需要检查成功和拒绝。对于同步版本,您需要捕获它可能抛出的任何异常。


推荐阅读