2020-5-11lesson

May 11, 2020

Use github package publish docker

gitlab.com 网络特别慢,经常 docker push 各种失败.

考虑到github.com 全部免费了,故接下来都转战github 了。(自建是不可能自建的,没有机器)

使用github token 登录(密码登录即将被废弃, 且push、pull 等操作都没有权限)

  1. Go to your GitHub account -> Settings -> Developer Settings -> Personal access tokens -> generate new token

  2. Note 选项写上一个标签

  3. 勾选 write:packages/read:packages, 然后保存

  4. 复制得到的token

docker login docker.pkg.github.com

User: 你的用户名(比如shaohung001)

Password: 第4步得到的token

node 升级package 的库版本

1
2
npm install -g npm-check-updates
ncu -u

Mac 删除node, 使用nvm 管理node

1
2
3
4
5
6
sudo npm uninstall npm -g
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*
sudo rm -rf /usr/local/include/node /Users/$USER/.npm
sudo rm /usr/local/bin/node
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d

下载nvm

1
2
3
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

然后在 ~/.bash_profile ~/.zshrc 中加入如下:

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
source ~/.bash_profile && source ~/.zshrc

重开一个terminal 就可以用看到 nvm 命令了

简单探索nodejs 不同第三方库dependence 相同库不同版本

今天使用puppeteer 和express 时发现,这两个dependence 包含有同一个库: mime。但是express 依赖mime 1.6.4 版本;puppeteer 依赖 2.x 版本;

我们到node_modules 子目录看到第三方库规划: node_modules/mime 是1.6.4,也就是express 依赖的;我们找到puppeteer 下,其提前依赖库本地的mime 2.x 的。

这样,puppeteer 在内部中,require 的是其自身node_modules/mime;express 自身没有node_modules 于是就往上找,也找到对应mime;

以上各自依赖相同库,不同版本,便不会冲突了

mocha test 时不通过

使用mocha test不通过,报错信息:

1
2
"before all" hook for "GET /VERSION":
Error: Timeout of 8000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/builds/xxxxxx/xxxxxx/backend/test/api.test.ts)

说明报错报错信息来源于 beforeAll 方法,且说没有使用done 告知.

原方法:

1
2
3
4
5
6
this.beforeAll(function(done) {
app.startup({testing: true}, (_server: Express.Application) => {
server = _server
done()
})
})

明显是有done 这个操作的,难道throw error 导致没有进入done 了??那我加个try catch 吧:

1
2
3
4
5
6
7
8
9
10
this.beforeAll(function(done) {
try {
app.startup({testing: true}, (_server: Express.Application) => {
server = _server
done()
})
} catch (error) {
done(error)
}
})

然后gitlab-ci 看到编译正常通过了, 但是没有进catch, 因为进了catch 我接下来拿不到server, 但之后又正常,说明只是说,要有try catch 确保有done 回馈即可!

以上. node -v : v10.20.1

这里更新下:

上面有时可以有时失败,说明不是最终原因. 以下是最终原因

最终的原因是gitlab-ci cpu、memory 太低,运行太慢,导致获取到server 太慢,无法得到done,做法是mocha -t 240000 设置4分钟.

这个原因也是没有预料到,没想到是机器配置比较低的原因。