You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:37:44