Node.js向GitHub托管的npm包传参报错解决方法
报错原因
你这个错本质是包的导出逻辑写反了:
你在admin-server的入口文件里,写的是module.exports = admin_task(server_detail)——这行代码会在包被require加载的阶段立刻执行admin_task函数,这时候server_detail根本还没定义,这个参数本来是要等客户端调用的时候才传进来的,加载阶段就调用当然会报未定义的错。
而且就算这行不报错,你导出的是admin_task的执行结果,不是函数本身,客户端拿到的admin_setup根本不是个可调用的方法,后面调用也会崩。
修复方法
1. 修改admin-server包的导出代码
把index.js里的导出逻辑改了,别在导出的时候执行函数,直接把函数本身导出去:
// 其他原有代码 const admin_task = (server_detail) =>{ // 原有处理server_detail的业务逻辑 } // 直接导出函数,不要在这里调用传参 module.exports = admin_task;
2. 检查admin-server包的基础配置
打开admin-server仓库根目录的package.json,确认main字段正确指向你写的入口文件,比如默认用index.js作为入口的话配置应该是:
{ "name": "admin-server", "version": "1.0.0", "main": "index.js" // 其余配置保持原样即可 }
这个字段配错的话npm会找错入口,容易出莫名其妙的问题。
3. 客户端更新依赖
你之前写的客户端调用逻辑本身是对的,不用改:
const admin_setup = require("admin-server"); const adminFunction = ()=>{ // 其他业务代码 const adminDetails = { /* 你要传递的配置参数 */ } admin_setup(adminDetails); }
改完admin-server的代码推到GitHub main分支之后,一定要在客户端项目里重新执行安装命令拉最新代码:
npm install github:esrot-server/admin-server#main
不然本地node_modules里还是旧的错误代码,改了也不会生效。
补充提醒
- 如果
admin_task里有异步逻辑,记得用async/await或者.then()处理返回结果,避免拿不到异步执行的结果。 - 后续每次admin-server推了新代码到main分支,客户端都要重新跑一遍上面的install命令才能拿到最新版本,GitHub托管的依赖不会像npm官方包那样自动检测更新。
内容的提问来源于stack exchange,提问作者Arun Yadav
相关产品推荐
相关产品推荐

