npm命令配置技巧

本文不是講package.json文件的配置,而是講npm命令本身的一些設置技巧及相關原理,如:如何用原生的npm命令使用淘寶的鏡像源?如何更改全局安裝的路徑?等等;我相信,對于高級用戶(龍其強迫癥者)肯定有許多諸如此類的需求;如果你正處理這些需求當中,那本文對你來說就是雪中送炭;


1. npm命令的配置

可以通過以下2種方式對npm命令進行配置:

  1. 通過npm的config指令;

    此命令是用來管理npm的配置文件的;所以通過config命令配置的項目實際上是通過更新配置文件npmrc來配置的;

  2. 通過修改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. 配置npm的注冊源的方式

  1. 通過給npm 命令添加注冊源選項;
    示例如下:

    npm --registry=https://registry.npm.taobao.org [npm命令]
    

    通過這種方式指定的注冊源只在本條命令內有效;

  2. 通過npm的config命令配置指向國內鏡像源;
    示例如下:

    npm config set registry https://registry.npm.taobao.org  //配置源為淘寶的源
    

    注意:
    通過config命令配置的項目實際上是通過更新用戶配置文件~/.npmrc來配置的;

  3. 在配置文件.npmrc 文件寫入源地址;
    示例如下:
    .npmrc文件內容

    registry=https://registry.npm.taobao.org   //寫入配置文件
    

備注:

  1. 第1種配置方法是命令內有效,第2和第3種配置方法是用戶內有效;
  2. 如果想恢復默認配置,只需要將用戶配置文件~/.npmrc刪除即可;

3. 使用淘寶鏡像的方法

使用淘寶鏡像有2種方式,如下:

  1. 安裝淘寶cnpm
    $ npm install -g cnpm --registry=https://registry.npm.taobao.org
    
  2. 配置npm的源為淘寶的源https://registry.npm.taobao.org

4. npm包的符號鏈接

npm的link命令是用來創建包的鏈接的;
他的具體機制如下:

  1. 如果在包的文件夾下執行npm link命令,則會在全局目錄下創建一個該包的符號鏈接{prefix}/lib/node_modules/<package>,如果該包包含可執行的命令文件,則也會把該包的可執行命令文件鏈接到全局目錄下{prefix}/bin/{commandName};
  2. 如果在不是包的文件夾下執行npm link package-name,則會在當前目錄./node_modules/下創建一個全局包package-name的符號鏈接;
  3. 如果在包packageA的文件夾下執行npm link packageB,則會:先把包packageB鏈接到全局目錄{prefix}/lib/node_modules/<packageB>下,然后再把全局目錄下的包packageB鏈接到當前目錄下的./node_module目錄下;

5. npm包的文件結構和安裝過程

1. 配置參數prefix

prefix參數指定全局安裝時相關目錄的共同路徑,即全局安裝的根目錄;

prefix在各個系統中的默認值如下:

大多數操作系統:/usr/local;
Windows系統:%AppData%\npm;

prefix的默認值是一般node的安裝位置;但在Unix系統上,prefix的位置是node安裝位置的上一級目錄,因為node通常安裝在 {prefix}/bin/node,而不是{prefix}/node.exe;

2. npm包的安裝方式及安裝目錄

1. npm的安裝包的方式有2種:

  1. 全局安裝:在安裝包時,當 global參數被設置為true 或者 全局選項被指定時,會進行全局安裝;此時,根據操作系統的不同,npm會將包安裝分別安裝如下位置:

    Unix系統:{prefix}/lib/node_modules
    Windows系統:{prefix}/node_modules

  2. 本地安裝:在安裝包時,當 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. 手冊頁的安裝路徑

  1. 在全局模式下,手冊頁被鏈接到{prefix}/share/man目錄下;
  2. 在本地模式下,手冊頁不會被安裝。
  3. 在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的安裝過程如下:

  1. npm會沿著當前文件夾的層級樹查找包含 package.json文件 或 node_modules文件夾 的文件夾;
  2. 如果查找到匹配的文件夾,那么該文件夾會被作為npm的執行文件夾;如果沒有查找到匹配的文件夾,則會使用當剪的文件夾作為npm的執行文件夾;
  3. 加載foo包到緩存中;
  4. 然后解壓foo包到路徑 ./node_modules/foo
  5. 然后加載foo包的依賴包到緩存中;
  6. 然后解壓foo包的依賴包到路徑 ./node_modules/foo/node_modules/...
  7. 把每一個可執行文件符號鏈接至路徑 ./node_modules/.bin/,以便在必要時可以通過npm腳本找到它們;

3. 安裝建議

  1. 如果被安裝的包需要通過require()引入,則需要把包安裝在本地;
  2. 如果被安裝的包需要在命令行中運行,則需要把包安裝在全局;
  3. 如果被安裝的包即需要通過require()引入,又需要在命令行中運行,則需要把包 分別安裝在本地和全局 或者 用 npm link 創建鏈接;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 描述 npm從以下來源獲取配置值,按優先級排序: 命令行標記 在命令行上放置--foo bar設置foo配置參數為...
    竹天亮閱讀 44,196評論 0 8
  • npm可以把包安裝到全局,也可以安裝到本地,但是對于工具類的包通常是在命令行中作為命令使用,如果不安裝到全局的話,...
    科研者閱讀 7,704評論 1 3
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,260評論 2 36
  • 1. npm命令的配置 可以通過以下2種方式對npm命令進行配置: 通過npm的config指令;此命令是用來管理...
    科研者閱讀 3,620評論 0 1
  • 原生JS和jQuery在DOM映射中的區別 在原生JS中,有DOM映射,改變頁面內容,JS 中獲取的元素集合同時改...
    Dream_丹丹閱讀 155評論 0 0