1. npm命令的配置
可以通過以下2種方式對npm命令進行配置:
- 通過npm的config指令;
此命令是用來管理npm的配置文件的;所以通過config命令配置的項目實際上是通過更新配置文件npmrc來配置的;
- 通過修改npm命令的配置文件npmrc文件;
npmrc配置文件的位置如下:
npm內嵌配置文件:/usr/local/lib/node_modules/npm/npmrc
全局配置文件:/etc/npmrc
用戶配置文件:~/.npmrc
項目配置文件$項目目錄/.npmrc
具體的配置命令如下
npm config set <key> <value> [-g|--global] //給配置參數key設置值為value;
npm config get <key> //獲取配置參數key的值;
npm config delete <key> //刪除置參數key及其值;
npm config list [-l] //顯示npm的所有配置參數的信息;
npm config edit //編輯配置文件
npm get <key> //獲取配置參數key的值;
npm set <key> <value> [-g|--global] //給配置參數key設置值為value;
2. 配置參數prefix
prefix參數指定全局安裝時相關目錄的共同路徑,即全局安裝的根目錄;
prefix在各個系統中的默認值如下:
大多數操作系統:/usr/local;
Windows系統:%AppData%\npm;
prefix的默認值是一般node的安裝位置;但在Unix系統上,prefix的位置是node安裝位置的上一級目錄,因為node通常安裝在 {prefix}/bin/node,而不是{prefix}/node.exe;
3. npm包的安裝方式及安裝目錄
1. npm的安裝包的方式有2種:
-
全局安裝:在安裝包時,當 global參數被設置為true 或者 全局選項被指定時,會進行全局安裝;此時,根據操作系統的不同,npm會將包安裝分別安裝如下位置:
Unix系統:{prefix}/lib/node_modules
Windows系統:{prefix}/node_modules 本地安裝:在安裝包時,當 global參數被設置為false 且 沒有指定全局選項時,會進行本地安裝;此時,npm會將包安裝到當前包下的node_modules目錄中 或 當前工作目錄下(如果當前目錄不在包中)的node_modules目錄中; 對于本地安裝的包,可以通過require("packagename")加載包的主模塊 或 通過require("packagename/lib/path/to/sub/module")加載包的其他模塊;
當被安裝的包是可執行的腳本時,可執行文件會被分別鏈接到不同的文件夾下,具體如下:
在全局安裝時:
在Unix系統中,可執行文件會被鏈接到{prefix}/bin目錄下;
在Windows系統中,可執行文件會直接連接到{prefix}目錄下;
在本地安裝時:
可執行文件會被鏈接到./node_modules/.bin目錄下,以便可以通過npm運行腳本。
2. 手冊頁的安裝路徑
- 在全局模式下,手冊頁被鏈接到{prefix}/share/man目錄下;
- 在本地模式下,手冊頁不會被安裝。
- 在Windows系統中也不會安裝手冊頁。
3. 高速緩存文件的路徑
緩存的文件的路徑由cache配置參數指定。
cache配置參數的默認值如下:
Posix系統:~/.npm
Windows系統:~/npm-cache
4. 臨時文件的路徑
臨時文件存儲在由配置參數tmp指定的路徑下;
在不同的操作系統中,tem的默認值為:
一般操作系統:環境變量TMPDIR、TMP 或 TEMP 的值;
Unix系統:/tmp
Windows系統:c:\windows\temp
程序會在每次運行時為臨時文件生成一個唯一的目錄,并程序成功退出后刪除這個目錄;
2. npm安裝包的過程
以本地安裝 npm install foo@1.2.3
為例,npm的安裝過程如下:
- npm會沿著當前文件夾的層級樹查找包含 package.json文件 或 node_modules文件夾 的文件夾;
- 如果查找到匹配的文件夾,那么該文件夾會被作為npm的執行文件夾;如果沒有查找到匹配的文件夾,則會使用當剪的文件夾作為npm的執行文件夾;
- 加載foo包到緩存中;
- 然后解壓foo包到路徑 ./node_modules/foo
- 然后加載foo包的依賴包到緩存中;
- 然后解壓foo包的依賴包到路徑 ./node_modules/foo/node_modules/...
- 把每一個可執行文件符號鏈接至路徑 ./node_modules/.bin/,以便在必要時可以通過npm腳本找到它們;
3. 安裝建議
- 如果被安裝的包需要通過require()引入,則需要把包安裝在本地;
- 如果被安裝的包需要在命令行中運行,則需要把包安裝在全局;
- 如果被安裝的包即需要通過require()引入,又需要在命令行中運行,則需要把包 分別安裝在本地和全局 或者 用 npm link 創建鏈接;