一、写在前面

上一次,笔者向大家介绍了把gitlab仓库作为npm私包的使用方法,具体的详见我的博文地址https://www.cnblogs.com/cnroadbridge/p/16406476.html,它能用,但是不够优雅,比如说你想知道那个包的版本就不是很直观能够在package.json中体现。好多天前,一次偶然的机遇,被甲方的金主发掘并看上,脱离后端好久的我硬着头皮写了一些Node方面的面试题,具体的详见我的博文地址https://www.cnblogs.com/cnroadbridge/p/16361744.html,通过面试后就去了某地一线内卷中心进行周末兼职工作,还挺有意思的,嘿嘿,老板给我工钱的同时,我又能学习接触新的领域和知识,这不,在这其中我就学到了一种基于gitlab管理npm私包的方法。

二、这是一个烂尾楼的故事

好几个月前,我曾经在github上写了一个项目,它主要是基于leetcode拿来刷题的,大概写了几十题是有的,语言的话我是用ts写的,然后每一题也有它的单元测试, 都帮你配置好的,感兴趣的可以clone、star、fork下来玩玩https://github.com/ataola/coding-ts,如果你对ts不太熟,其实一年前我也是用js刷了一些题的,你可以看下这个https://github.com/ataola/coding,主要是有段时间特别忙,就没有时间和精力去做这件事,后来就停下来了,然后兼职也占了我一部分时间,一个人自嗨和一群人共舞还能拿点钱,那我肯定选后者啊,所以这个项目就烂尾了,谈起烂尾,我在2013年左右看到在我附近有一栋烂尾楼,得益于3号线的开发,这栋烂尾楼于去年又活了过来,我想后面我可能也是这个模式,也许某一天我又激活了这个项目,其实后面我更倾向于一个月输出3-7题题目上去润润脑子,毕竟你会做和你会做并把别人教会是两码事。

三、以我的烂尾楼项目为例进行GitHub package发包测试

发包嘛,总要选个仓库试一试,我看了下我的仓库列表,我决定让烂尾楼申请出战!!!

不知为何,我那个图片上输入不了中文,所以我就意思下写了几句英语,望周知。

3.1、创建github的AccessToken

Step1: 点击用户头像的settings进入设置页面

Step2: 点击Developer Settings进入开发者配置页面

Step3: 点击personal access token进入token配置页面,然后点击generate token创建一个新的token

Step4: 填写对于的token信息,拉到最下面点击generate new token按钮,这里需要注意啊,这个token它只会出现一次,所以生成以后,你复制粘贴到一个你能够保存的地方给他存起来哈

3.2、使用npm登录github package网站

Step 1: 登录github package的包网站 npm login --registry=https://npm.pkg.github.com

Step 2: 输入用户名密码,注意这里的密码就是你刚才在楼上生成的token,而不是你登录github账号的密码

具体的你可以看下楼下的日志:

➜  coding-ts git:(main) npm login --registry=https://npm.pkg.github.com
npm notice Log in on https://npm.pkg.github.com/
Username: ataola
Password:
Email: (this IS public) zjt613@gmail.com
Logged in as ataola on https://npm.pkg.github.com/.
➜  coding-ts git:(main)

Step 3: 设置所有@ataola开头的依赖包,都从Github源上获取

npm config set @ataola:registry=https://npm.pkg.github.com

3.3、尝试着发个包看看

这里需要注意的是,package.json里面的包名字需要改一下,比如我之前是"name": "coding-ts",,就需要改成"name": "@ataola/coding-ts",不然推不上去哈哈。

然后执行命令 npm publish

如果发版成功的话,就会有个github packages页面的,比如我这个项目的是https://github.com/ataola/coding-ts/packages/1525960

3.4、尝试着拉下刚才那个包

这里需要注意哈,3.2这个步骤你一定要做完再往下走,直接走3.4是不行的,即使配置了npm config set @ataola:registry=https://npm.pkg.github.com

日志如下:

➜  tmp npm install @ataola/coding-ts
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmmirror.com/@ataola%2fcoding-ts - [NOT_FOUND] @ataola/coding-ts not found
npm ERR! 404
npm ERR! 404  '@ataola/coding-ts@latest' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-07-10T00_34_11_096Z-debug.log
➜  tmp npm config set @ataola:registry=https://npm.pkg.github.com
➜  tmp npm install @ataola/coding-ts
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-07-10T00_34_32_327Z-debug.log
➜  tmp npm install @ataola/coding-ts@1.0.1
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-07-10T00_35_03_569Z-debug.log
➜  tmp

配置完token后,效果是这样的

➜  tmp npm install @ataola/coding-ts@1.0.1

added 1 package in 1s
➜  tmp tree -L 3
.
├── node_modules
│   └── @ataola
│       └── coding-ts
├── package-lock.json
└── package.json

3 directories, 2 files
➜  tmp cat package.json
{
  "name": "tmp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@ataola/coding-ts": "^1.0.1"
  }
}
➜  tmp

这在管理github上创建团队的仓库私包简直是福音啊,2022年好像用的代码编辑器,仓库,包管理,包含云啥的都是微软的哈哈

四、思考和总结

通过楼上的学习,你学会了github的发包吗? 其实除了npm包, github package也支持docker、 maven、nuGet、ruby等package的管理,有兴趣的同学可以去了解下。

除了楼上的东西外,我在兼职的时候也搞过下loopback这个框架,它是通过一些配置和命令可以自动生成从数据库到后端实体的关系映射,以及基于Open API接口的对应实现,这样子的好处是,你可以少写很多代码就可以得到很多后端接口,50%-60%非定制化需求的接口工作量它都能自动帮你实现,这对一个人手本身不足初创团队来说,无疑是一个好消息,有兴趣的读者可以去了解下,剩余的需求可以用midway或者egg这种业务框架去实现那些看着稍微复杂和定制化的业务需求,当然这其中你要实现抹平两个框架的认证差异,简单的说就是实现jwt或者类似于jwt的认证体系共享,这个就是我之前在团队做的部分工作之一。

如果你只是想通过这篇文章学习技术的,那你可以走了,因为后面的更多的是一种人生观价值观的交流,感兴趣的可以听一下我唠嗑哈。

兼职这件事吧,是一种双赢的合作模式吧。在几个月前我对未来非常迷茫,甚至有轻度抑郁倾向,那段时间我很低迷,每天中午午饭时间看半部豆瓣前250的电影去感悟世界和理解世界的一些情感,生命都是脆弱的,在一些事情面前显得很无力又很无助,是兼职它给了我一些激励和动力,晨兴周末理荒秽赶地铁,带月禾锄电脑归,一天也能赚个千八百的零花钱改善改善生活,第二天再去山姆超市买点面包水果蔬菜饮料,然后去外婆家弄堂里海底捞啥的吃顿好的,偶尔社会责任感爆棚也会通过腾讯公益、联合国儿童基金会向有需要的人提供一些金钱上的帮助,燃烧自己,为了社会主义的事业发光发热,一周也就这么过去了,充实而忙碌,嗯,总比躺在床上睡觉强,年轻人还是要有点上进心,你们也不用可怜我起早贪黑地讨生活,那又有什么办法呢,如果有的选,谁还不是个宝宝,谁不想做公主王子那样,吃着冰淇淋吹着空调看看电影啥的,毕竟房价那么贵,靠平时的工资也就只能温温饱饱,所以我其实是建议你们周末再出来为我们的社会主义建设出一份力出一份爱心的,做点微小的工作,嗯。

我其实运营着一个大概五六个人的兼职小群,其中有写JAVA的,有写Vue、有写React的,他们相信我,觉得我是一道光,能够给他们带来一些活,作为新时代农民工,一起去码头办公室扛沙包写代码,所以如果您有项目上需要软件开发的帮助,或者您想在闲暇之余像我一样找点事做吃顿好的,欢迎你们联系我,本着一切为社会主义发展做贡献的原则,我是很愿意做这样一些中间的枢纽去沟通协调这部分的工作,毕竟林清玄曾经说过,“大国民的品质,一是从容,二是有情”。

最后,我给大家推荐一部我那段时间看过的一部电影叫《美丽人生》,故事中小男孩爸爸一直是一个积极向上阳光的存在,哪怕到了生命最后一刻,也都是尽力保护着孩子维护着孩子的童年童真,那一回头,是那么地阳光灿烂,真的好治愈啊。

希望我的一些过往经历和经验,能够在技术上或者建立一个理性的社会主义观上帮助到你,房子会有的,车子也会有的,对象也会来的,只要你努力努力再努力,加油加油再加油,为了社会主义的事业燃烧自己,发光发热吧!!!

五、参考文献

https://docs.github.com/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#in-this-article

github package的使用教程
标签: