如何将index.js中的变量传递到api.js等其他文件?
可行实现方案
以下都是CommonJS规范下可直接运行的实现方式,按推荐优先级排序:
方案1:导出工厂函数接收参数(最推荐,无耦合、不易污染变量)
把api.js的逻辑封装在导出的函数里,通过入参接收index.js传递的数据,需要对外暴露的方法通过函数return返回。
- api.js改造示例:
// api.js module.exports = function (passData) { // 此处passData就是index.js传过来的变量,文件内所有逻辑都可以直接访问 // 原有api.js的业务逻辑写在这里 const fetchUserInfo = () => { console.log('接收到index.js传递的数据:', passData) // 业务逻辑... } // 把需要外部调用的方法导出 return { fetchUserInfo } }
- index.js引入方式调整:
// index.js const needPassData = { token: 'xxx', userId: 1001 } // 你要传递的变量 const api = require("/api.js")(needPassData) // 引入时直接调用传参 // 后续正常调用api方法即可 api.fetchUserInfo()
方案2:给导出对象挂载共享属性(适合多文件共享配置场景)
利用CommonJS模块的缓存特性,同一个模块被多次require时只会返回同一份实例,直接给导出的对象赋值即可传递数据。
- api.js改造示例:
// api.js module.exports = { shareConfig: {}, // 预留属性接收外部传递的数据 fetchUserInfo() { console.log('读取到的共享配置:', this.shareConfig) // 业务逻辑... } }
- index.js引入后赋值即可:
// index.js const api = require("/api.js") const needPassData = { token: 'xxx', userId: 1001 } api.shareConfig = needPassData // 给共享属性赋值 // 后续正常调用方法即可,其他文件require这个api.js时也能拿到赋值后的shareConfig api.fetchUserInfo()
方案3:全局变量挂载(不推荐,仅适合临时调试)
直接把要传递的数据挂在Node.js的global全局对象上,api.js内可以直接读取,缺点是容易污染全局命名空间,可能出现变量名冲突、被意外篡改的问题。
- index.js写法:
// index.js global.needPassData = { token: 'xxx', userId: 1001 } require("/api.js")
- api.js内直接读取即可:
// api.js console.log('读取全局变量:', global.needPassData)
注意:CommonJS模块是同步加载且带缓存的,只要在入口文件第一次require api.js时完成参数传递,后续项目内其他文件再require同一个api.js,都能拿到已经传入的参数,不需要重复传值。
内容的提问来源于stack exchange,提问作者Thebeston123
相关产品推荐
相关产品推荐

