Node.js(io.js) & npmをアンインストールしてHomebrewとnvmで管理する
パッケージ版からインストールした Node.js / io.js / npm をいったんアンインストールして、Homebrew による管理に移行しようとしたらつまづいたので nvm を導入した話です。
Uninstall npm
sudo npm uninstall npm -g
npm からアンインストールしないとenv: node: No such file or directory
と言われる。
Uninstall Node.js
- Mac OS X から Node.js をアンインストールする方法
- node.js - How do I uninstall nodejs installed from pkg (Mac OS X)? - Stack Overflow
#シェルスクリプトの途中でパスワードを聞かれるのを防ぐ sudo echo Password:
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \ | while read i; do sudo rm /usr/local/${i} done
sudo rm -rf /usr/local/lib/node \ /usr/local/lib/node_modules \ /var/db/receipts/org.nodejs.*
$ brew doctor
をやってみたら警告が出てきたので対処
Warning: Unbrewed header files were found in /usr/local/include. If you didn't put them there on purpose they could cause problems when building Homebrew formulae, and may need to be deleted. Unexpected header files: /usr/local/include/node/android-ifaddrs.h /usr/local/include/node/ares.h /usr/local/include/node/ares_version.h /usr/local/include/node/libplatform/libplatform.h /usr/local/include/node/nameser.h /usr/local/include/node/node.h
/usr/local/include/node/
を削除
rm -r /usr/local/include/node/
Uninstall io.js
sudo rm /usr/local/bin/node sudo rm /usr/local/bin/iojs
pkg で入れたものを消す。参考:
本題の端的な手順説明
Homebrewの点検
$ brew doctor Your system is ready to brew.
Homebrew を使って nvm をインストール
$ brew install nvm $ mkdir ~/.nvm $ cp $(brew --prefix nvm)/nvm-exec ~/.nvm/
zshを使っているので .zshrc に以下を追記
export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh
.zshrc を再読み込み
$ source .zshrc
nvm を使って io.js をインストール
$ nvm install iojs Now using io.js v2.0.1 (npm v2.9.0) $ nvm current iojs-v2.0.1 $ iojs -v v2.0.1 $ node -v v2.0.1 $ npm -v 2.9.0
以下、そこに至るまでの経緯
Install with Homebrew (注意: 途中で断念します)
Homebrew の点検
$ brew doctor Warning: Your Homebrew is outdated. You haven't updated for at least 24 hours. This is a long time in brewland! To update Homebrew, run `brew update`.
Homebrew 自体を更新
$ brew update
$ brew doctor Your system is ready to brew.
io.js (+ npm) をインストール
$ brew install iojs
警告が出た。
==> Downloading https://homebrew.bintray.com/bottles/iojs-2.0.1.yosemite.bottle.tar.gz Already downloaded: /Library/Caches/Homebrew/iojs-2.0.1.yosemite.bottle.tar.gz ==> Pouring iojs-2.0.1.yosemite.bottle.tar.gz ==> Caveats iojs was installed without npm. iojs currently requires a patched npm (i.e. not the npm installed by node). This formula is keg-only, which means it was not symlinked into /usr/local. iojs conflicts with node (which is currently more established) Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables: LDFLAGS: -L/usr/local/opt/iojs/lib CPPFLAGS: -I/usr/local/opt/iojs/include ==> Summary 🍺 /usr/local/Cellar/iojs/2.0.1: 134 files, 13M
node との衝突が想定されるので、それに配慮していますという警告。
しかし LDFLAGS とかわからない。調べたら Makefile の何からしい。Makefile のことはよくわからない。新参にキビシイ…
救世主あらわる blog.chrisyip.im
$ brew link iojs
Warning: iojs is keg-only and must be linked with --force
Note that doing so can interfere with building software.
iojs は keg-only (keg: 小さい樽・Homebrew: 自家醸造) つまりダウンロードだけしてパスを通していないので--force
を指定して意図的に link してね、という話。
$ brew link iojs --force Linking /usr/local/Cellar/iojs/2.0.1... Error: Could not symlink share/man/man1/iojs.1 Target /usr/local/share/man/man1/iojs.1 already exists. You may want to remove it: rm '/usr/local/share/man/man1/iojs.1' To force the link and overwrite all conflicting files: brew link --overwrite iojs To list all files that would be deleted: brew link --overwrite --dry-run iojs
--dry-run
でリハーサル。
$ brew link --overwrite --dry-run --force iojs Would remove: /usr/local/share/man/man1/iojs.1 /usr/local/share/systemtap/tapset/node.stp /usr/local/lib/dtrace/node.d
$ brew link --overwrite --force iojs Linking /usr/local/Cellar/iojs/2.0.1... 6 symlinks created $ iojs -v v2.0.1 $ node -v v2.0.1 $ npm -v zsh: command not found: npm
薄々感じていたけど… npm 入ってない。
iojs currently requires a patched npm (i.e. not the npm installed by node).
― $ brew install iojs
io.jsをアンインストールして元の状態に戻す
$ brew unlink iojs Unlinking /usr/local/Cellar/iojs/2.0.1... 9 symlinks removed $ brew uninstall iojs Uninstalling /usr/local/Cellar/iojs/2.0.1... (134 files, 13M)
良い管理方法をさがす
Homebrew を使って nvm をインストールし、nvm で Node.js / io.js のバージョン管理を行うのが良さそう。npm はインストール時についてくる。
nvm のインストール
$ brew install nvm ==> Downloading https://github.com/creationix/nvm/archive/v0.25.1.tar.gz ######################################################################## 100.0% ==> Downloading https://raw.githubusercontent.com/creationix/nvm/v0.25.1/nvm-exec ######################################################################## 100.0% ==> Caveats Add NVM's working directory to your $HOME path (if it doesn't exist): mkdir ~/.nvm Copy nvm-exec to NVM's working directory cp $(brew --prefix nvm)/nvm-exec ~/.nvm/ Add the following to $HOME/.bashrc, $HOME/.zshrc, or your shell's equivalent configuration file: export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh Type `nvm help` for further information. Bash completion has been installed to: /usr/local/etc/bash_completion.d ==> Summary 🍺 /usr/local/Cellar/nvm/0.25.1: 6 files, 80K, built in 4 seconds
言われたとおりに実行。
mkdir ~/.nvm cp $(brew --prefix nvm)/nvm-exec ~/.nvm/
zshを使っているので .zshrc に以下を追記
export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh
.zshrc を再読み込み
$ source .zshrc
nvm で io.js をインストール
$ nvm install iojs ######################################################################## 100.0% WARNING: checksums are currently disabled for io.js Now using io.js v2.0.1 (npm v2.9.0) $ nvm current iojs-v2.0.1 $ iojs -v v2.0.1 $ node -v v2.0.1 $ npm -v 2.9.0
おわった…日が暮れている…