npm命令配置技巧

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


1. npm命令的配置

可以通過以下2種方式對npm命令進(jìn)行配置:

  1. 通過npm的config指令;

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

  2. 通過修改npm命令的配置文件npmrc文件;

npmrc配置文件的位置如下:

npm內(nèi)嵌配置文件:/usr/local/lib/node_modules/npm/npmrc
全局配置文件:/etc/npmrc
用戶配置文件:~/.npmrc
項目配置文件$項目目錄/.npmrc

具體的配置命令如下

npm config set <key> <value> [-g|--global]  //給配置參數(shù)key設(shè)置值為value;
npm config get <key>          //獲取配置參數(shù)key的值;
npm config delete <key>       //刪除置參數(shù)key及其值;
npm config list [-l]      //顯示npm的所有配置參數(shù)的信息;
npm config edit     //編輯配置文件
npm get <key>     //獲取配置參數(shù)key的值;
npm set <key> <value> [-g|--global]    //給配置參數(shù)key設(shè)置值為value;

2. 配置npm的注冊源的方式

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

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

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

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

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

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

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

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

備注:

  1. 第1種配置方法是命令內(nèi)有效,第2和第3種配置方法是用戶內(nèi)有效;
  2. 如果想恢復(fù)默認(rèn)配置,只需要將用戶配置文件~/.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命令是用來創(chuàng)建包的鏈接的;
他的具體機(jī)制如下:

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

5. npm包的文件結(jié)構(gòu)和安裝過程

1. 配置參數(shù)prefix

prefix參數(shù)指定全局安裝時相關(guān)目錄的共同路徑,即全局安裝的根目錄;

prefix在各個系統(tǒng)中的默認(rèn)值如下:

大多數(shù)操作系統(tǒng):/usr/local;
Windows系統(tǒng):%AppData%\npm;

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

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

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

  1. 全局安裝:在安裝包時,當(dāng) global參數(shù)被設(shè)置為true 或者 全局選項被指定時,會進(jìn)行全局安裝;此時,根據(jù)操作系統(tǒng)的不同,npm會將包安裝分別安裝如下位置:

    Unix系統(tǒng):{prefix}/lib/node_modules
    Windows系統(tǒng):{prefix}/node_modules

  2. 本地安裝:在安裝包時,當(dāng) global參數(shù)被設(shè)置為false 且 沒有指定全局選項時,會進(jìn)行本地安裝;此時,npm會將包安裝到當(dāng)前包下的node_modules目錄中 或 當(dāng)前工作目錄下(如果當(dāng)前目錄不在包中)的node_modules目錄中; 對于本地安裝的包,可以通過require("packagename")加載包的主模塊 或 通過require("packagename/lib/path/to/sub/module")加載包的其他模塊;

當(dāng)被安裝的包是可執(zhí)行的腳本時,可執(zhí)行文件會被分別鏈接到不同的文件夾下,具體如下:
在全局安裝時:

在Unix系統(tǒng)中,可執(zhí)行文件會被鏈接到{prefix}/bin目錄下;
在Windows系統(tǒng)中,可執(zhí)行文件會直接連接到{prefix}目錄下;

在本地安裝時:

可執(zhí)行文件會被鏈接到./node_modules/.bin目錄下,以便可以通過npm運(yùn)行腳本。

2. 手冊頁的安裝路徑

  1. 在全局模式下,手冊頁被鏈接到{prefix}/share/man目錄下;
  2. 在本地模式下,手冊頁不會被安裝。
  3. 在Windows系統(tǒng)中也不會安裝手冊頁。

3. 高速緩存文件的路徑

緩存的文件的路徑由cache配置參數(shù)指定。
cache配置參數(shù)的默認(rèn)值如下:

Posix系統(tǒng):~/.npm
Windows系統(tǒng):~/npm-cache

4. 臨時文件的路徑

臨時文件存儲在由配置參數(shù)tmp指定的路徑下;
在不同的操作系統(tǒng)中,tem的默認(rèn)值為:

一般操作系統(tǒng):環(huán)境變量TMPDIR、TMP 或 TEMP 的值;
Unix系統(tǒng):/tmp
Windows系統(tǒng):c:\windows\temp

程序會在每次運(yùn)行時為臨時文件生成一個唯一的目錄,并程序成功退出后刪除這個目錄;

2. npm安裝包的過程

以本地安裝 npm install foo@1.2.3為例,npm的安裝過程如下:

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

3. 安裝建議

  1. 如果被安裝的包需要通過require()引入,則需要把包安裝在本地;
  2. 如果被安裝的包需要在命令行中運(yùn)行,則需要把包安裝在全局;
  3. 如果被安裝的包即需要通過require()引入,又需要在命令行中運(yùn)行,則需要把包 分別安裝在本地和全局 或者 用 npm link 創(chuàng)建鏈接;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

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