nodeJs note 1

#######################################################
2013.7.17 UPDATED
慎用此方法!
依舊推薦用sudo安裝npm!
修改prefix后bin沒法正確添加到全局變量的bin里去。
會導致npm里的bin方法不能用,得手動添加bin目錄,非常麻煩。
所以最後我也還是把自定義的prefix刪掉了。
#######################################################

是的,終於開始學node了。

1. 安裝全局npm或karma等大型npm的時候需要sudo嗎?

mac下,npm默認全局安裝路徑在 /usr/local/lib/node_modules
如果想安裝在默認路徑的話,npm install -g [module_name] 需要sudo
當然,我不希望把npm安裝到那深的目錄下去,於是乎
npm config set prefix ~/.node_modules -g
這樣就OK了,之後安裝全局包都會自動滾到這個目錄下,不需要sudo。
安全健康快捷。

2. $NODE_PATH問題

好吧,這個問題是上面那個問題造成的。
nodeJs的版本是v0.10.12,npm的版本是1.2.32。
按照問題一的方法修改了npm的global路徑,再npm install -g underscore
新建了一個foo.js,第一行var _ = require("underscore");
node foo.js的時候報錯說找不到underscore。
為什麼?!
鬱悶了好久,一點點查問題。官網文檔說:

Additionally, node will search in the following locations:
1. $HOME/.node_modules
2. $HOME/.node_libraries
3. $PREFIX/lib/node

OK,問題就在1和3上。
明顯我在「問題一」里確實把$PREFIX設置成了~/.node_modules
但是underscore被安裝在了$PRIFIX/lib/node_modules/underscore
不是~/.node_modules/underscore
也不是~/.node_modules/lib/node/underscore
為什麼?!這大概得問開發者了吧。

官方文檔還提到了$NODE_PATH這個詞,雖然我沒看懂官方文檔,但是echo $NODE_PATH為空。
好吧,那我們來設置一下$NODE_PATH吧。
鑒於我用zsh,所以在~/.zshrc里加了行:
export NODE_PATH=~/.node_modules/lib/node_modules/
source .zshrc,再node foo.js
一切OK了。
_(:3 」∠ )_
好累……

———-學會的命令———-
npm config set/get prefix
﹣ 顯示/設置npm安裝路徑,加-g就設置全局的,不加設置個人的。
npm config list
﹣ 列出當前的npm設置。

———-今日一吐槽———-
不能用Markdown的博客不是好博客。

One thought to “nodeJs note 1”

Comments are closed.