使用module.exports导出函数报错,改用export default后调用失败求助
问题解决步骤
核心问题分析
你遇到的报错是因为当前环境采用ES模块(ESM)规范,不允许使用CommonJS的module.exports语法;同时你的Interview定义存在错误,不是合法的构造函数,导致new调用后无法找到方法。
方案一:直接导出实例对象(无需构造函数)
修正interview.js代码
原代码中Interview.prototype = ...的写法完全错误,你实际是通过立即执行函数创建了一个包含方法的对象,直接导出这个对象即可:
// ./assets/js/jquery/interview.js const Interview = (function ($) { const collapseLocalStoredElements = function (localStorageId) { let collapseItemsIds = localStorage.getItem(localStorageId); console.log(collapseItemsIds); return collapseItemsIds; // 可选:返回结果供调用者使用 }; return { collapseLocalStoredElements: collapseLocalStoredElements, }; }(jQuery)); export default Interview;
修正App.js代码
ESM规范下不能用require,改用import,且无需new(因为导出的已经是实例对象):
// App.js import Interview from './js/jquery/interview.js'; // 直接调用方法 console.log(Interview.collapseLocalStoredElements('collapseItemsIds'));
方案二:使用构造函数(支持多实例)
如果需要实例化多个Interview对象,修正构造函数的定义:
修正interview.js代码
// ./assets/js/jquery/interview.js function Interview($) { this.$ = $; // 存储jQuery实例供内部使用 } // 把方法挂载到原型上 Interview.prototype.collapseLocalStoredElements = function (localStorageId) { let collapseItemsIds = localStorage.getItem(localStorageId); console.log(collapseItemsIds); return collapseItemsIds; }; export default Interview;
修正App.js代码
// App.js import Interview from './js/jquery/interview.js'; // 实例化时传入jQuery const interview = new Interview(jQuery); console.log(interview.collapseLocalStoredElements('collapseItemsIds'));
环境配置确认
确保项目支持ESM规范:
- 若为Node.js项目,在根目录
package.json中添加:"type": "module" - 若为浏览器直接引入,在
<script>标签中添加:type="module"
内容的提问来源于stack exchange,提问作者MrsStorm
相关产品推荐
相关产品推荐

