我正在做一个小的Node.js脚本,我想用途:
在同一个文件中。但我正在努力解决如何同时导入两个库的问题。
如果我的类型package.json
类型是commonJs
:
- 尝试导入
import { loadJsonFile } from "load-json-file"
时得到SyntaxError: Cannot use import statement outside a module
- 如果我尝试用
require("load-json-file")()
加载,我会得到Error [ERR_REQUIRE_ESM]: require() of ES Module D:\Dev\my-project\node_modules\load-json-file\index.js from D:\Dev\fsvl-date-check\index.js not supported. Instead change the require of D:\Dev\my-project\node_modules\load-json-file\index.js in D:\Dev\my-project\index.js to a dynamic import() which is available in all CommonJS modules.
。
现在,如果我尝试将package.json
切换到module
:
- 我得到
SyntaxError: Named export 'prompt' not found. The requested module 'prompt-sync' is a CommonJS module, which may not support all module.exports as named exports.
,当我尝试像这样导入:import { prompt } from "prompt-sync";
。 - 我得到
ReferenceError: require is not defined in ES module scope, you can use import instead
,如果我尝试像这样导入它:var prompt = require("prompt-sync")();
如何在同一个项目中使用这两个包?
1条答案
按热度按时间vxqlmq5t1#
在ES模块(
"type": "module"
)中:你想做
import prompt from 'prompt-sync';
。虽然您可以从ES模块完全导入commonjs模块,但没有 named exports。因此只能导入默认导出。这两行中的任何一行都可以工作并执行相同的操作:这是因为commonjs模块只有一个导出。
来自commonjs模块
要导入ES模块,您需要执行动态
import
,如错误消息所述:import()
返回一个Promise,解析为一个模块。所以你需要在异步函数中调用它,或者使用.then
来解析promise。然后
loadJsonFileModule
是一个模块, Package 所有导出,而不是默认导出。因此,您需要执行类似loadJsonFileModule.loadJsonFile(...)
的操作。