JavaScript >> Javascript 文檔 >  >> Tags >> npm

配置 NPM 的終極指南

簡介

在我看來,Node 包管理器或 npm 是 Node 最好的部分之一。包管理確實可以成就或破壞一門語言,因此確保它易於使用和靈活非常重要。

在我使用 Node 的過程中,我只知道基本的 npm 命令,例如 save , install , 和 publish ,即使那樣我也並不真正知道與它們一起使用的可選參數。最近閱讀了一些幫助文檔後,我認為盡可能多地寫下有關 npm 配置的詳細信息會很有幫助。我認為這不僅對讀者有幫助,而且對我查看所有不同的標誌/參數並實際測試它們非常有幫助。我最終學到了很多關於 npm 的知識,這將在未來幫助我很多。

在大多數情況下,我試圖為每個參數寫一個獨特的描述(不同於幫助文檔)。希望這樣,如果幫助文檔使您感到困惑(或沒有足夠的信息),我的描述將使您更深入地了解您正在尋找的任何內容。我還將添加一些更令人困惑的參數的示例,因此如果您知道如何使用一些更無文檔的選項,例如 searchopts ,我很想看一個例子!

設置參數

除非另有說明,否則以下所有參數都可以通過幾種不同的方法進行設置,我將在此處簡要介紹每種方法。根據您的用例,將不同的用途用於測試、項目特定配置、全局配置等。

npmrc 文件

npm 允許你使用幾個不同的 rc 文件,很像 ~/.bashrc , 設置您的配置。文件可能駐留的四個位置是:

  • 每個項目的配置文件:/path/to/my/project/.npmrc
  • 每用戶配置文件:~/.npmrc
  • 全局配置文件:$PREFIX/npmrc
  • 內置 npm 配置文件:/path/to/npm/npmrc
https-proxy=proxy.example.com
init-license=MIT
init-author-url=http://stackabuse.com
color=true

您使用的文件應該取決於您要設置的參數和範圍。因此,例如,您可能想要設置 https-proxy 在全局 npmrc 文件中,而不是在項目級 npmrc 文件中,因為系統上的所有項目都需要代理設置。

環境變量

npm 將在本地(或在 npmrc 文件中)設置的參數上使用一些環境變量。一些例子是 NODE_ENVHTTPS_PROXY .您也可以設置任意 npm 參數,通過在環境變量前加上 npm_config_ .這樣您就可以執行 export npm_config_registry=localhost:1234 之類的操作 .

很多人習慣於使用環境變量進行配置,所以這應該是他們熟悉的。例如,配置 Docker 實例的一個好方法是從 dockerfile 設置環境變量。

命令行上的標誌

並非所有參數都需要在文件或環境變量中永久設置。其中許多可以在 npm 命令中用作標誌,以 -- 為前綴 .

例如,如果您正在從註冊表安裝一個新包並希望將其保存到您的 package.json 文件,您需要使用 --save 標誌,但情況可能並非總是如此。在某些情況下,您可能希望使用 --save-dev 甚至是 --save-optional ,所以使用 npmrc 沒有意義。

package.json 文件

在您的 package.json 內 項目文件,您也可以設置參數。在這種情況下,config 應該使用地圖,像這樣:

{
  "name": "module-name",
  "version": "10.3.1",
  "config": {
    "foo": "bar",
    "test-param": 12
  },
  "dependencies": {
    "express": "4.2.x",
  }
}

然後在您的代碼中,您可以使用 process 訪問這些參數 全局變量,像這樣:process.env.npm_package_config_foo .注意前綴 npm_package_config_ ,它告訴 Node 從哪裡獲取變量。

注意 :這僅在您通過 npm 腳本運行項目時才有效(即 not 只使用 node index.js )。

npm 配置集

最後,始終可以通過 npm config set 設置參數 .這將優先於 package.json 配置。因此,例如,如果您運行 npm config set module-name:foo baz 從命令行(並且有 package.json 文件),然後是你的 foo 參數將是 baz 而不是 bar . module-name 範圍界定將確保不會為任何其他項目設置此變量。

像上面的方法一樣,要讓這個方法起作用,你必須 通過 npm 腳本運行程序,例如 npm run .

可能參數列表

我試圖盡可能地對每個參數進行分類,但其中許多參數在其他類別中也能很好地工作。所以,經過一番思考,我只是將每個參數放在對上下文最有意義的類別中。

希望我組織得足夠好,以便您可以將其用作參考。如有錯誤或遺漏,請隨時告訴我!

訪問控制/授權

訪問

這將設置包的範圍訪問級別,默認為 restricted .將此參數設置為 public 使其公開可見和可安裝。如果您的項目是無範圍的,那麼它是公開的。

  • 默認:受限
  • 類型:訪問(字符串)
always-auth

如果您想對 every 進行身份驗證,請設置為 true 訪問註冊表的時間,即使是 GET 請求。

  • 默認值:假
  • 類型:布爾值
ca

這是證書頒發機構簽名證書,用於信任與包註冊表的 SSL 連接。要指定證書,請使用 PEM 格式並將所有換行符替換為 \n 特點。因此,例如,設置 CA 可能如下所示:

ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

您還可以通過指定一組證書來信任多個 CA,每行一個:

ca[]="..."
ca[]="..."

或者,設置 ca 為 null 將指定默認的已知註冊商。

  • 默認值:npm CA 證書
  • 類型:字符串、數組或 null
cafile

類似於 ca 參數,cafile 允許您設置連接到註冊表的受信任證書。這裡的區別是可以指定證書的文件路徑,可以包含一個或多個證書。

  • 默認值:null
  • 類型:路徑
證書

cert 參數指定用於向註冊表進行身份驗證的客戶端證書。這與之前的 ca 相反 和 cafile 證書,因為它用於客戶端身份驗證而不是註冊表身份驗證。如果您託管自己的註冊表,這可能是一種將其設為私有的好方法,而無需使用用戶名和密碼進行身份驗證。

  • 默認值:null
  • 類型:字符串

緩存

緩存

這是npm的緩存目錄的位置。

  • 默認值:Windows:%AppData%\npm-cache , 正則化:~/.npm
  • 類型:路徑
緩存鎖定陳舊

緩存文件夾鎖定文件被認為是陳舊的毫秒數。

  • 默認值:60000(1 分鐘)
  • 類型:數字
緩存鎖定重試

重試獲取緩存文件夾鎖定文件鎖定的次數。

  • 默認值:10
  • 類型:數字
緩存鎖定等待

等待緩存鎖定文件過期的毫秒數。

  • 默認值:10000(10 秒)
  • 類型:數字
緩存最大值

這是在使用註冊表更新之前緩存項目的最長時間(以秒為單位)。因此,如果您預計包會經常更改,那麼您需要將其設置為較低的數字。

清除緩存包的唯一時間是 npm cache clean 使用命令(或者,您也可以手動清理包以選擇要清除的包)。

  • 默認值:無窮大
  • 類型:數字
緩存最小

cache-max 的對面 參數,cache-min 參數設置在再次檢查註冊表之前將項目保留在緩存中的最短時間(以秒為單位)。

  • 默認值:10
  • 類型:數字

一般

顏色

color param 確定是否在 npm 輸出中使用著色。如果設置為 true,則 npm 僅打印 tty 文件描述符的顏色。或者您可以將其設置為 always 總是使用顏色。

  • 默認值:在 Posix 上為 true,在 Windows 上為 false
  • 類型:布爾值或“總是”
描述

確定使用 npm search 時是否顯示包描述 .

  • 默認值:true
  • 類型:布爾值
強制

使用 force 將使各種命令更加有力。您幾乎可以將其視為使用 sudo ,您將能夠繞過某些限制。因此,僅舉幾個例子,使用這意味著生命週期腳本失敗不會阻止進度,發布覆蓋以前發布的版本,npm 在從註冊表請求時跳過緩存,或者它會阻止檢查覆蓋非 npm 文件。

  • 默認值:假
  • 類型:布爾值
全球

global 導致給定命令在“全局”模式下運行。系統上的所有用戶和項目都可以訪問安裝在此文件夾中的軟件包。這意味著軟件包安裝在“前綴”文件夾中,通常是安裝節點的位置。具體來說,全局包將位於 {prefix}/lib/node_modules , bin 文件將鏈接到 {prefix}/bin ,並且手冊頁將鏈接到 {prefix}/share/man .

  • 默認值:假
  • 類型:布爾值
全局配置

要讀取全局配置選項的配置文件的位置。

  • 默認:{prefix}/etc/npmrc
  • 類型:路徑

這個參數告訴 npm 在以 root 用戶在全局模式下運行包腳本時使用哪個系統組。

  • 默認:當前進程的組ID
  • 類型:字符串或數字

運行npm ls時是否顯示詳細信息 和 npm search .

  • 默認值:假
  • 類型:布爾值
前綴

這是安裝全局項的位置,默認情況下是 npm 本身的安裝位置。如果 prefix 在命令行上設置,然後非全局命令被強制在給定文件夾中運行。

  • 默認:見 npm help 5 folders
  • 類型:路徑
自旋

spin 參數確定在 npm 等待或處理某些內容時是否顯示 ASCII 微調器(假設 process.stderr 是 TTY)。這可以設置為 false 以完全抑制微調器,或者設置為 'always' 以輸出微調器,即使對於非 TTY 輸出也是如此。

  • 默認值:true
  • 類型:布爾值或“總是”
tmp

存儲臨時文件和目錄的目錄。一旦 npm 進程成功完成,所有文件和目錄都將被刪除。但是,如果該過程失敗,則文件和目錄不是 刪除,以便您可以檢查它們並調試問題。

  • 默認值:TMPDIR 環境變量,或“/tmp”
  • 類型:路徑
unicode

unicode 參數告訴 npm 是否在樹輸出中使用 unicdoe 字符。如果 false , 只使用 ASCII 字符來繪製樹木。

  • 默認值:true
  • 類型:布爾值
不安全的燙髮

unsafe-perm 設置為 true , 運行包腳本時禁止用戶/組 ID 切換。如果 false ,非root用戶將無法安裝包。

  • 默認值:如果以 root 身份運行,則為 false,否則為 true
  • 類型:布爾值
用法

使用 usage flag 在獲取命令幫助時減少輸出量。而不是向您顯示命令的所有可能標誌/輸入,例如 -H flag 會,它只是為您提供幫助文檔的要點。因此,例如,執行 npm --usage search 將輸出 npm search [some search terms ...] .

  • 默認值:假
  • 類型:布爾值
用戶

這是包腳本以 root 身份運行時使用的 UID。因此,如果您不希望腳本具有 root 權限,請將其設置為具有正確權限級別和應用程序訪問權限的用戶的 UID。以 root 身份運行包腳本可能很危險!

  • 默認值:“無人”
  • 類型:字符串或數字
用戶配置

這是用戶級配置文件的位置。系統上的每個用戶都可以有不同的 npm install 設置,文件應該位於 userconfig 中給出的路徑 .

  • 默認值:~/.npmrc
  • 類型:路徑
umask

這是為文件和目錄設置文件創建模式時使用的掩碼值。創建的文件/目錄的類型取決於使用的​​掩碼值。如果是目錄或可執行文件,則 umask 值被 0777 屏蔽 .對於所有其他文件,umask 值被 0666 屏蔽 .默認值為 07550644 分別是每個文件類型的一個相當保守的掩碼。

  • 默認值:022
  • 類型:0000..0777 (0..511) 範圍內的八進制數字字符串
版本

使用此標誌輸出已安裝的 npm 版本。 這僅在命令行上用作標誌時有效npm --version .

  • 默認值:假
  • 類型:布爾值
版本

使用這個標誌類似於 version , 但它會輸出幾個不同包的版本詳細信息(作為 JSON),包括當前目錄中的項目(如果存在)、V8、npm 和來自 process.versions 的詳細信息 . 這僅在命令行上用作標誌時有效npm --versions .

示例輸出可能如下所示:

{ 'my-project': '0.0.1',
  npm: '2.14.2',
  http_parser: '2.3',
  modules: '14',
  node: '0.12.2',
  openssl: '1.0.1m',
  uv: '1.4.2-node1',
  v8: '3.28.73',
  zlib: '1.2.8' }
  • 默認值:假
  • 類型:布爾值
查看器

這是查看幫助內容時要使用的程序。如果設置為“瀏覽器”,默認的網絡瀏覽器將打開並以 HTML 格式顯示幫助內容。

  • 默認值:Posix 上的“man”,Windows 上的“browser”
  • 類型:路徑、“人”或“瀏覽器”

開發

開發

在安裝包時使用這個標誌也將安裝 dev-dependencies 包。當不在生產環境中運行項目時,幾乎總是應該使用它。

這類似於 npat 標誌。

  • 默認值:假
  • 類型:布爾值
編輯器

這是打開編輯器時要運行的命令(或可執行文件的路徑)。

  • 默認值:EDITOR 環境變量(如果已設置),或在 Posix 上為“vi”,在 Windows 上為“記事本”。
  • 類型:路徑
引擎嚴格

這個參數告訴 npm 它是否應該遵循 package.json 中的引擎規範 嚴格歸檔。如果設置為 true , 如果當前 Node.js 版本與指定的不匹配,則包安裝將失敗。

當包需要某個 Node.js 版本,甚至 io.js(可能是因為包使用 ES6 特性)時,這很有用。

  • 默認值:假
  • 類型:布爾值
git

這應該是用於運行 git 命令的命令。這對於安裝 git 但它不在 PATH 上時很有用,在這種情況下,您需要指定 git install 的路徑。

  • 默認值:“git”
  • 類型:字符串
git-tag-version

這告訴 npm 在運行 npm version 時是否應該標記提交 命令(它會改變包版本並將其保存到 package.json )。這可能有助於減少錯誤(忘記標記 git 提交,將其標記為錯誤的版本等),但它也給你更少的控制權,所以你必須權衡取捨。

  • 默認值:true
  • 類型:布爾值
標題

輸出調試信息時要打印的字符串。

  • 默認值:“npm”
  • 類型:字符串
如果存在

使用 npm run-script 時 命令,如果腳本未在 package.json 中定義 文件,然後 npm 以錯誤代碼退出。如果 if-present 設置為 true ,則不返回錯誤代碼。當您有選擇地想要運行腳本但不在乎它是否不存在時,這很有用。因此,例如,也許您有一個腳本(腳本 A ) 存在於您的一些項目中,但不是全部,並且您使用另一個通用腳本(腳本 B ) 運行它。這樣如果腳本 A 不存在,然後腳本 B 不會出錯,可以安全地繼續執行。

  • 默認值:假
  • 類型:布爾值
忽略腳本

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

將此標誌設置為不運行 package.json 中定義的任何腳本 項目文件。

  • 默認值:假
  • 類型:布爾值
初始化模塊

這是有助於初始化項目的 JavaScript 文件的路徑。因此,如果您有一個希望所有新項目都具有的自定義配置(比如可能依賴於 Bluebird 或默認引擎),那麼您可以在指定的位置創建一個文件來為您處理初始化。

  • 默認值:~/.npm-init.js
  • 類型:路徑
初始化作者名

npm init 使用的默認名稱 創建新項目時。

  • 默認值:“”
  • 類型:字符串
初始化作者電子郵件

npm init 使用的默認作者郵箱 創建新項目時。

  • 默認值:“”
  • 類型:字符串
init-author-url

npm init 使用的默認作者 url 創建新項目時。

  • 默認值:“”
  • 類型:字符串
初始化許可證

npm init 使用的默認許可證 創建新項目時。

  • 默認值:“ISC”
  • 類型:字符串
初始化版本

npm init 使用的默認版本 創建新項目時。

  • 默認值:“1.0.0”
  • 類型:字符串
json

這個參數決定了 npm 是把它的輸出寫成 json 還是常規文本。

注意 :npm 聲稱此功能是實驗性的,hte JSON 對象的結構可能會發生變化。

  • 默認值:假
  • 類型:布爾值

如果 link 設置為 true,則本地安裝將鏈接到全局包安裝(如果存在匹配的包)。此功能的一個重要副產品是,通過鏈接到全局包,本地安裝可以導致在全局空間中安裝其他東西。

如果滿足以下兩個條件之一,則創建鏈接:

  • 該軟件包尚未全局安裝

  • 全局安裝的版本與本地安裝的版本相同

  • 默認值:假

  • 類型:布爾型

本地地址

這是連接到 npm 註冊表時要使用的系統本地網絡接口的 IP 地址。

注意 :這必須是 Node v0.12 及更早版本中的 IPv4 地址。

  • 默認值:未定義
  • 類型:IP 地址
日誌級別

這是運行應用程序時的默認日誌級別。如果有一個日誌事件高於(或等於)此處給出的事件,則將其輸出給用戶。當/如果應用程序失敗,全部 日誌寫入 npm-debug.log 在當前工作目錄中。

  • 默認值:“警告”
  • 類型:字符串
日誌流

npmlog 使用的流 在運行時打包。

注意 :這不能在命令行上設置。您必須使用其他方法,例如文件或環境變量來配置它。

  • 默認:process.stderr
  • 類型:流
消息

這是 npm version 使用的提交消息 命令。 '%s' 格式字符將替換為版本號。

  • 默認值:“%s”
  • 類型:字符串
節點版本

檢查包的 engines 時使用的 Node 版本 package.json 中的聲明 文件。

  • 默認:process.version
  • 類型:semver 或 false
npat

是否在安裝時運行包的測試。

  • 默認值:假
  • 類型:布爾值
onload-script

這是 requre() 的包的位置 一旦 npm 加載。對於 npm 的編程使用,建議使用此方法。

  • 默認值:假
  • 類型:路徑,或“假”
可選

這告訴 npm 從 optionalDependencies 安裝包 package.json 中的地圖 文件。因為這些是可選的 依賴項,如果安裝失敗,npm 將 not 中止進程。

  • 默認值:true
  • 類型:布爾值
可解析

parseable 參數告訴 npm 在寫入標準輸出時將其輸出格式化為可解析的格式。

  • 默認值:假
  • 類型:布爾值
生產

當設置為 true , npm 在生產模式下運行,這主要意味著 devDependencies 沒有安裝。請注意,您應該使用 NODE_ENV="production" 使用生命週期腳本時改為環境變量。

  • 默認值:假
  • 類型:布爾值
回滾

將此標誌與 npm 一起使用將刪除任何無法安裝的軟件包(例如,可能是由於編譯/依賴錯誤)。

  • 默認值:true
  • 類型:布爾值
保存

將此標誌與 npm 一起使用會將給定的包保存到本地 package.json dependencies 下的文件 .或者,將此標誌與 npm rm 一起使用 命令將從 dependencies 中刪除一個依賴項 package.json 部分 文件。

請注意,這只適用於 package.json 文件存在於當前目錄中。

  • 默認值:假
  • 類型:布爾值
保存包

如果在安裝時使用 --save 保存包 , --save-dev , 或 --save-optional flags,然後也把它放在 bundleDependencies 列表。與 npm rm 一起使用時 命令,它將它從 bundledDependencies 中刪除 列表。

  • 默認值:假
  • 類型:布爾值
保存開發

使用此標誌將包保存到 devDependencies package.json 中的列表 文件。與 npm rm 一起使用時則相反 ,表示該包將從 devDependencies 中刪除 .像 save 標誌,這僅在有 package.json 時才有效 文件存在。

  • 默認值:假
  • 類型:布爾值
精確保存

當一個依賴被保存到 package.json 使用 --save 之一的文件 , --save-dev--save-optional flags,那麼它將使用確切的版本號而不是 npm 的默認 semver 範圍運算符進行配置。

  • 默認值:假
  • 類型:布爾值
保存可選

使用此標誌將包保存到 optionalDependencies package.json 中的列表 文件。與 npm rm 一起使用時則相反 ,表示該包將從 optionalDependencies 中刪除 .像 save 標誌,這僅在有 package.json 時才有效 文件存在。

  • 默認值:假
  • 類型:布爾值
保存前綴

此參數確定如何將包保存到 package.json 如果與 --save 一起使用 或 --save-dev 標誌。以默認值為例,如果我們保存一個版本為 1.2.3 的包 ,那麼它實際上會保存在package.json中 作為 ^1.2.3 .

  • 默認值:'^'
  • 類型:字符串
範圍

使用 scope 告訴 npm 為作用域註冊表使用什麼作用域。這在第一次使用私有註冊表時可能很有用。示例:

npm login [email protected] --registry=registry.example.com

這會導致 @organization 映射到此註冊表,以便將來安裝根據模式 @organization/package 指定的包 .

  • 默認值:“”
  • 類型:字符串
收縮包裝

false , npm-shrinkwrap.json 文件在安裝過程中被忽略。

  • 默認值:true
  • 類型:布爾值
sign-git-tag

執行npm version時 命令並使用此標誌,-s 標記期間將使用標誌添加簽名。為了讓它工作,你必須已經在你的 git configs 中設置了 GPG 密鑰。

  • 默認值:假
  • 類型:布爾值
標籤

當從 npm 安裝一個包並且沒有指定版本時,將使用這個標籤。

  • 默認:最新
  • 類型:字符串
標籤版本前綴

使用 npmversion 時附加到包版本的字符 .當其他程序有版本的樣式約定時,這很有用。

  • 默認值:“v”
  • 類型:字符串

網絡

https-代理

用於傳出 HTTPS 連接的代理。如果設置了以下任何環境變量,則使用它們代替:HTTPS_PROXY , https_proxy , HTTP_PROXY , http_proxy .

  • 默認值:null
  • 類型:網址
代理

用於傳出 HTTP 連接的代理。如果設置了以下任何環境變量,則使用它們代替:HTTP_PROXY , http_proxy .

  • 默認值:null
  • 類型:網址
嚴格-ssl

這告訴 npm 是否使用 SSL 通過 HTTPS 與註冊表連接。

  • 默認值:true
  • 類型:布爾值
用戶代理

為 HTTP(S) 請求設置 User-Agent 請求標頭。

  • 默認:node/{process.version} {process.platform} {process.arch}
  • 類型:字符串

註冊表

獲取重試

npm 嘗試聯繫註冊表以獲取包的次數。

  • 默認值:2
  • 類型:數字
獲取重試因子

獲取包時使用的重試模塊的“因素”配置。

  • 默認值:10
  • 類型:數字
獲取-重試-mintimeout

從註冊表中獲取包時在超時之前等待的最短時間。

  • 默認值:10000(10 秒)
  • 類型:數字(毫秒)
fetch-retry-maxtimeout

從註冊表獲取包時超時前等待的最長時間。

  • 默認值:10000(10 秒)
  • 類型:數字(毫秒)

這是向註冊表進行身份驗證時要使用的客戶端密鑰。

  • 默認值:null
  • 類型:字符串
註冊表

用於獲取和發布包的註冊表的 URL。

  • 默認:https://registry.npmjs.org/
  • 類型:網址
搜索選擇

以空格分隔的選項列表,始終用於搜索註冊表。

  • 默認值:“”
  • 類型:字符串
搜索排除

以空格分隔的限制列表,始終用於搜索註冊表。

  • 默認值:“”
  • 類型:字符串
搜索排序

這表明應該對結果中的哪個字段進行排序。要反轉排序順序,只需在其前面加上 - .

  • 默認值:“名稱”
  • 類型:字符串
  • 值:“name”、“-name”、“date”、“-date”、“description”、“-description”、“keywords”、“-keywords”

Tutorial JavaScript 教程
  1. 我如何使用 AWS Lambda、SES 和 React 重新創建 Hey Feed

  2. 帶有雙引號的json解析錯誤

  3. 在 React 應用程序中使用 Firebase 處理用戶身份驗證

  4. 在 JS 中克隆的 3 種方法

  5. React 類與 Funcomps

  6. ES6 鍵控集合:映射和集合

  7. 在更改窗口大小時顯示實時寬度和高度值

  1. 面向 Web 開發人員的頂級 VS 代碼擴展

  2. npm包管理器簡介

  3. 輕鬆創建自己的 NGRX | Redux 商店

  4. 如何將 JSON 對象轉換為 JavaScript 數組?

  5. 鼠標點擊觸發鼠標離開

  6. JavaScript 類

  7. Javascript方法命名小寫與大寫

  1. 試試 Chatwoot,這是一個開源客戶參與套件,用於設置多語言實時聊天支持。

  2. GraphQL:前端超級大國

  3. 我如何知道我使用的是哪個版本的 Javascript?

  4. 使用 Nodejs 的支付網關 Stripe/Paypal 的依賴反轉