用 brew
安装 node
的时候出现了一些问题:
==> Downloading https://homebrew.bintray.com/bottles/node-15.5.1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/15f527955cf7991efe94fa3b20903b67b947a83fb99f42ec28bb4a359bc5ca4a?r
############################################# 63.2%
curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
Error: Failed to download resource "node"
Download failed: https://homebrew.bintray.com/bottles/node-15.5.1.big_sur.bottle.tar.gz
Warning: Bottle installation failed: building from source.
应该是原来的node没卸载干净。
1. 彻底删除node后用brew安装
~ sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}
~ brew install node
报错
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 37 formulae.
==> Downloading https://homebrew.bintray.com/bottles/node-15.5.1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/15f527955cf7991efe94fa3b20903b67b947a83fb99f42ec28bb4a359bc5ca4a?r
######################################################################## 100.0%
==> Pouring node-15.5.1.big_sur.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/doc/node/gdbinit
Target /usr/local/share/doc/node/gdbinit
already exists. You may want to remove it:
rm '/usr/local/share/doc/node/gdbinit'
To force the link and overwrite all conflicting files:
brew link --overwrite node
To list all files that would be deleted:
brew link --overwrite --dry-run node
Possible conflicting files are:
/usr/local/share/doc/node/gdbinit
/usr/local/share/doc/node/lldb_commands.py
/usr/local/share/systemtap/tapset/node.stp
/usr/local/lib/dtrace/node.d
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall node`
==> Summary
🍺 /usr/local/Cellar/node/15.5.1: 3,291 files, 55.5MB
==> `brew cleanup` has not been run in 30 days, running now...
Pruned 1 symbolic links from /usr/local
Error: Permission denied @ apply2files - /usr/local/lib/node_modules/@vue/cli/node_modules/extglob/lib/.DS_Store
第一个error,说的是formula is not symlinked into /usr/local. Could not symlink share/doc/node/gdbinit:
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/doc/node/gdbinit
Target /usr/local/share/doc/node/gdbinit
already exists. You may want to remove it:
rm '/usr/local/share/doc/node/gdbinit'
第二个是权限问题,这个我不太清楚。
我根据第一个错误查了一番之后发现原因可能是这个:
It looks like several files and directories in /usr/local are now owned by root, since you ran a couple of steps using sudo.
参考:
github: Unable to link node
stackoverflow: Homebrew npm install: could not symlink
stackoverflow: chown: /usr/local: Operation not permitted - issue with brew update /usr/local is not writable - MacOS 10.13.1 high sierra
2. 收回权限
~ sudo chown -R $(whoami) $(brew --prefix)/*
运行doctor:
~ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
node
3. 根据提示建立link
~ brew link node
Linking /usr/local/Cellar/node/15.5.1...
Error: Could not symlink share/doc/node/gdbinit
Target /usr/local/share/doc/node/gdbinit
already exists. You may want to remove it:
rm '/usr/local/share/doc/node/gdbinit'
To force the link and overwrite all conflicting files:
brew link --overwrite node
To list all files that would be deleted:
brew link --overwrite --dry-run node
报错:
Error: Could not symlink share/doc/node/gdbinit
Target /usr/local/share/doc/node/gdbinit
already exists. You may want to remove it:
rm '/usr/local/share/doc/node/gdbinit'
这个还是和之前一样,强行建立link:
~ brew link --overwrite node
Linking /usr/local/Cellar/node/15.5.1... 8 symlinks created
4. 校验
~ brew doctor
Your system is ready to brew.
~ node -v
v15.5.1
5. 安装 npm
查看 npm 版本的时候发现 npm 找不到:
~ npm -v
zsh: command not found: npm
这时运行:
~ brew postinstall node
==> Postinstalling node
~ npm -v
7.3.0
这里需要注意的是,因为前面第三步已经解决过 brew 安装目录的权限问题了,所以直接运行
brew postinstall node
就可以了,如果没有解决过,需要先解决权限问题。