Vue应用引入JS模块报错module.exports为undefined是什么原因?
问题原因
- Vue项目的前端运行环境默认遵循ES模块(ESM)规范,
module、module.exports是CommonJS规范的内置变量,仅Node.js或专门配置过的CommonJS打包环境才会注入,前端默认环境下不存在module全局对象,因此直接调用module.exports会抛出变量未定义的错误。 - 你已经在Vue文件中使用了ESM规范的
import语法导入模块,混用CommonJS导出逻辑本身也会存在兼容问题,即便打包工具做了兼容处理,也会增加不必要的解析开销。
修复方案
直接将module.js的导出逻辑改为ESM规范即可:
如果是要导出多个方法的对象,用默认导出:
// module.js 代码 export default { example1: function() { return true }, // 其他要导出的方法可以继续加在这里 }
如果是单个方法/变量导出,也可以用命名导出:
// module.js 代码 export const example1 = () => true
对应导入逻辑:默认导出可以保留你现有的import Module from '../module.js'写法,调用时用Module.example1()即可;命名导出需要调整导入写法为import { example1 } from '../module.js',可以直接调用example1()。
模块存放建议
- 通用工具类模块统一放在
src/utils/目录下,全局所有组件都可以方便引用,也便于后续维护 - 如果该模块仅为特定业务模块服务,可以存放在对应业务模块的目录下,比如
src/views/对应业务文件夹/utils/ - 不要将js模块放在
public等静态资源目录下,放在src目录内的代码会经过打包工具的编译、压缩、Tree Shaking优化,性能更好。
内容的提问来源于stack exchange,提问作者optinator
相关产品推荐
相关产品推荐

