如何在不修改引用文件的前提下为.js文件新增导出并保留默认导出
不修改引用文件的前提下扩展模块导出内容
问题场景
现有common.js仅导出一个对象,some_other_file_1.js通过const common = require('common')引用并使用该对象。需要修改common.js新增导出cool_func等内容,但不能修改some_other_file_1.js。
原代码
some_other_file_1.js(禁止修改)
const common = require('common') const foo = () => { common.dostuff() }
common.js(需修改)
const common = { dostuff: () => { // 省略业务代码 }, } const cool_func = () => { // 省略业务代码 } module.exports = common // >>> 希望同时导出cool_func <<<
解决方案
核心思路是在原导出对象上挂载新的属性/方法,这样既不会破坏原有引用文件的逻辑,又能新增导出内容。有两种写法:
写法一:先挂载到原对象再导出
const common = { dostuff: () => { // 省略业务代码 }, } const cool_func = () => { // 省略业务代码 } // 将新函数挂载到原导出对象上 common.cool_func = cool_func; module.exports = common;
写法二:直接给module.exports添加属性
module.exports = { dostuff: () => { // 省略业务代码 }, } const cool_func = () => { // 省略业务代码 } // 直接为导出对象新增属性 module.exports.cool_func = cool_func;
使用新导出内容
其他需要使用cool_func的文件,可以通过两种方式调用:
- 解构获取:
const { cool_func } = require('common') - 从导出对象中获取:
const common = require('common'); common.cool_func()
而some_other_file_1.js中的common.dostuff()调用完全不受影响,无需任何修改。
内容的提问来源于stack exchange,提问作者NadavS
相关产品推荐
相关产品推荐

