Node.js项目跨目录导入前端类文件的问题求助
Node.js跨模块导入兼容解决方案
方案1:全局启用ES模块
- 在项目根目录创建或修改
package.json,添加"type": "module"字段,让Node.js默认将所有.js文件识别为ES模块:{ "type": "module" } - 修改
nodefile.js使用ES模块的import语法,同时兼容原文件的两种导出方式:// Nodejs/nodefile.js // 导入ES模块导出的类 import { class1, class2 } from '../JS/jsfile.js'; // 导入module.exports的内容(ES模块中会被视为默认导出) import jsExports from '../JS/jsfile.js'; const Class = jsExports.Class;
方案2:使用动态导入(无需全局修改)
- 在CommonJS环境的
nodefile.js中,用异步动态导入加载ES模块,完全兼容原文件的导出逻辑:// Nodejs/nodefile.js async function init() { const esModule = await import('../JS/jsfile.js'); const { class1, class2 } = esModule; const Class = esModule.Class; // 兼容module.exports的内容 // 在此处使用导入的类 console.log(class1, class2, Class); } init();
方案3:添加中间兼容层
- 在
JS目录下创建compat.cjs(CommonJS格式),作为中间转换文件:// JS/compat.cjs // 用动态导入加载ES模块(Node.js 18+支持顶层await) const { class1, class2 } = await import('./jsfile.js'); module.exports = { class1, class2, Class: class1 // 同步原module.exports的导出 }; - 然后在
nodefile.js中直接用require导入这个兼容文件:// Nodejs/nodefile.js const { class1, class2, Class } = require('../JS/compat.cjs');
内容的提问来源于stack exchange,提问作者Jord van Eldik
相关产品推荐
相关产品推荐

