如何在Node.js脚本中兼容require与import并使用两个库
解决同时使用prompt-sync和load-json-file的模块兼容问题
给你两个可行的解决办法,根据你偏好的模块系统选择即可:
办法一:保持项目为CommonJS模式(不设置"type": "module")
因为load-json-file是纯ESM模块,CommonJS里不能直接用require加载,但可以用Node.js支持的**动态import()**来异步加载它,搭配async/await处理:
// 正常导入CommonJS的prompt-sync const prompt = require('prompt-sync')(); // 用async函数包裹业务逻辑,处理动态import的异步操作 async function runScript() { // 动态加载ESM模块load-json-file const { loadJsonFile } = await import('load-json-file'); // 接下来正常使用两个库 const userInput = prompt('请输入一段内容:'); const jsonData = await loadJsonFile('./your-file.json'); console.log('用户输入:', userInput); console.log('加载的JSON数据:', jsonData); } // 执行主函数并捕获错误 runScript().catch(err => console.error('脚本出错:', err));
办法二:切换项目为ESM模式(设置"type": "module")
prompt-sync是CommonJS模块,ESM导入它时需要用默认导入,再调用导出的函数得到prompt实例:
// 正常导入ESM的load-json-file import loadJsonFile from 'load-json-file'; // 默认导入CommonJS的prompt-sync,再执行函数得到prompt import promptSync from 'prompt-sync'; const prompt = promptSync(); // 用async函数处理loadJsonFile的异步操作 async function runScript() { const jsonData = await loadJsonFile('./your-file.json'); const userInput = prompt('请输入一段内容:'); console.log('加载的JSON数据:', jsonData); console.log('用户输入:', userInput); } runScript().catch(err => console.error('脚本出错:', err));
补充说明
- 第一种办法不用修改package.json,适合习惯CommonJS写法的场景;
- 第二种办法需要在package.json里添加
"type": "module",符合ESM的现代写法。
内容的提问来源于stack exchange,提问作者J4N
相关产品推荐
相关产品推荐

