1. nvm
nvm的目录是~/.nvm
1 | nvm alias default 8.11.3 #使用node 8.11.3作为默认版本 |
1.1 特定node的目录
比如node 6.9.5的目录是
.nvm/versions/node/v6.9.5/lib/node_modules
2. yarn
npm模块的依赖,现在用yarn
,它的缓存在~/.npm。
注意在安装nvm的情况下,不要再安装node了`brew install yarn –without-node
3. nvm alias default v8.16.2
绑定default版本后,然后npm所有安装库都会使用$HOME/.nvm/versions/node/v8.16.2/bin/,所以绝对不要复制此路径下的可执行文件到/usr/local/bin/中去,那样会导致找到相关文件的错误。
4. node写server的不便
对于数子的左移运算, 容易出现负数,这是因为js只有Double类型,没有Long类型。解决方案就是使用BigInt, 并且所有的运算都要是BigInt.
1
2
3
4
5
6
7
8
9
10
11> v0 = 2372662195
2372662195
> v0 << 4
-692110544
> v0 << 4 & 0xFFFF
15152
> b = BigInt(v0)
2372662195n
> b<<4n
37962595120n
> b<<4zlib的不便
- node中zlib的inflate不支持windowBits为负数(即去掉head和tail)
- zlib-sync 这个库支持设置windowBits=-15,但是它有严重的内存泄漏问题,我排除了好久才解决。由于有Rust FFI的基础,秉着内存谁分配谁清楚的规则,我查看了zlib-sync的原生代码,并没有原生端释放的代码,所以基本确定是它泄漏了原生的分配的内存,而且很夸张地泄漏了10倍左右压缩文件的大小。
- pako支持windowBits=-15,也没有内存泄漏问题,所以最后选了它。不知道我一开始为什么用它没有成功,浪费时间在zlib-sync上了。
node的Buffer.from(string)可能也有内存泄漏问题,头大。
https://docs.python.org/3/library/zlib.html
- 没有整数
比如a = b/8 *8, 结果就是浮点数,需要手动转为整数总的来说就是语言层面提供的类型系统不完整。1
2
3
4
5
6
7
8const num = Math.floor(v.length / 8) * 8; // must use floor to cast to Int
let ret = "";
for (let i = 0; i < num; i += 8) {
const x = v.subarray(i, i + 8);
const _r = tea_decipher(x, k).toString("hex");
ret += _r;
}
return ret;
5. VS Code Debug
如果遇到要从stdin接受数据,那么需要修改console.
1 | { |
ref: https://github.com/Microsoft/vscode/issues/47860
6. npm总是定位到另一个版本
使用nvm安装了node 16和18两个版本,但是npm总是定位到node 18的版本。这个就是很奇怪,删除重装也不行,环境变量和软连接检查了。后来我把node 16的版本删除了,还是继续报错,不过这个时候有日志了,看日子发现,npm读取了$HOME/.npmrc文件,里面配置了node 16的版本。到这文件中删除了prefix=~/.nvm/versions/node/v16.20.0,然后npm正常了。话说你这个Baidu Comate提示是怎么来的?