npm-init

建立一個 package.json 檔案

選擇 CLI 版本

概要

npm init <package-spec> (same as `npx <package-spec>`)
npm init <@scope> (same as `npx <@scope>/create`)
aliases: create, innit

說明

npm init <initializer> 可用來設定新的或現有的 npm 套件。

initializer 在此情況下是一個名為 create-<initializer> 的 npm 套件,它將由 npm-exec 安裝,然後執行其主要 bin -- 預計會建立或更新 package.json 並執行任何其他與初始化相關的操作。

init 指令會轉換為對應的 npm exec 操作,如下所示

  • npm init foo -> npm exec create-foo
  • npm init @usr/foo -> npm exec @usr/create-foo
  • npm init @usr -> npm exec @usr/create
  • npm init @usr@2.0.0 -> npm exec @usr/create@2.0.0
  • npm init @usr/foo@2.0.0 -> npm exec @usr/create-foo@2.0.0

如果省略初始化器(僅呼叫 npm init),init 將回歸到舊版 init 行為。它會詢問你一系列問題,然後為你撰寫一個 package.json。它會嘗試根據現有欄位、相依關係和選取的選項做出合理的猜測。它嚴格是累加的,因此它會保留任何已設定的欄位和值。你也可以使用 -y/--yes 完全略過問卷。如果你傳遞 --scope,它將建立一個範圍套件。

注意:如果使用者已在全域安裝 create-<initializer> 套件,npm init 會使用該套件。如果你希望 npm 使用最新版本,或指定其他特定版本,你必須明確指定

  • npm init foo@latest # 從註冊中心擷取並執行最新的 create-foo
  • npm init foo@1.2.3 # 特別執行 create-foo@1.2.3

轉發其他選項

任何其他選項都會直接傳遞至指令,因此 npm init foo -- --hello 會對應到 npm exec -- create-foo --hello

為了更清楚說明選項是如何轉送的,以下是一個更進階的範例,顯示傳遞至 npm cli 和建立套件的選項,以下兩個指令是等效的

  • npm init foo -y --registry=<url> -- --hello -a
  • npm exec -y --registry=<url> -- create-foo --hello -a

範例

使用 create-react-app 建立一個新的 React 專案

$ npm init react-app ./my-react-app

使用 create-esm 建立一個新的相容於 esm 的套件

$ mkdir my-esm-lib && cd my-esm-lib
$ npm init esm --yes

使用舊版 init 產生一個純粹的 package.json

$ mkdir my-npm-pkg && cd my-npm-pkg
$ git init
$ npm init

在不詢問任何問題的情況下產生

$ npm init -y

工作區支援

你可以使用 workspace 設定選項,在你的專案中建立一個新的工作區。當使用 npm init -w <dir> 時,cli 會建立預期的資料夾和樣板,同時也會在你的專案 package.json"workspaces": [] 屬性中加入一個參考,以確保新產生的 工作區 正確設定為工作區。

假設有一個沒有工作區的專案,例如

.
+-- package.json

你可以使用舊版 init 產生一個新的工作區

$ npm init -w packages/a

這會產生一個新的資料夾和 package.json 檔案,同時也會更新你的頂層 package.json,加入對這個新工作區的參考

.
+-- package.json
`-- packages
`-- a
`-- package.json

工作區 init 也支援 npm init <initializer> -w <dir> 語法,遵循本頁面開頭的 說明 區段中說明的相同規則集。類似於使用 create-react-app 建立新的 React 專案的先前範例,下列語法會確保在專案中建立新的 React 應用程式,並將其作為巢狀 工作區,並設定 package.json 以將其識別為巢狀工作區

npm init -w packages/my-react-app react-app .

這會確保如預期般產生您的 React 應用程式,需要考慮的一項重要事項是 npm exec 將在該工作區新建立的資料夾中執行,這就是為什麼在這個範例中,初始化器會使用初始化器名稱,後面加上一個點來表示該內容中的目前目錄,例如:react-app .

.
+-- package.json
`-- packages
+-- a
| `-- package.json
`-- my-react-app
+-- README
+-- package.json
`-- ...

組態

init-author-name

  • 預設值:""
  • 類型:字串

套件作者名稱的 npm init 應預設使用的值。

init-author-url

  • 預設值:""
  • 類型:"" 或 URL

套件作者首頁的 npm init 應預設使用的值。

init-license

  • 預設值:"ISC"
  • 類型:字串

套件授權的 npm init 應預設使用的值。

init-module

  • 預設值: "~/.npm-init.js"
  • 類型:路徑

npm init 指令載入的模組。請參閱 init-package-json 模組文件,以取得更多資訊,或 npm init

init-version

  • 預設值:"1.0.0"
  • 類型:SemVer 字串

套件版本號碼的 npm init 應預設使用的值,如果尚未在 package.json 中設定。

yes

  • 預設值:null
  • 類型:null 或布林值

自動回答 npm 可能在指令列上列印的任何提示。

force

  • 預設值:false
  • 類型:布林值

移除各種防護措施,以避免產生不幸的副作用、常見錯誤、不必要的效能降低和惡意輸入。

  • 允許在全域安裝中覆寫非 npm 檔案。
  • 允許 npm version 命令在不乾淨的 git 儲存庫上執行。
  • 允許使用 npm cache clean 刪除快取資料夾。
  • 允許安裝具有需要不同版本 npm 的 engines 宣告的套件。
  • 允許安裝具有需要不同版本 nodeengines 宣告的套件,即使已啟用 --engine-strict
  • 允許 npm audit fix 安裝超出您所述依賴範圍的模組(包括 SemVer 主要變更)。
  • 允許取消發布已發布套件的所有版本。
  • 允許在根專案中安裝衝突的 peerDependencies。
  • npm init 期間隱含設定 --yes
  • 允許在 npm pkg 中覆寫現有值
  • 允許取消發布整個套件(不只單一版本)。

如果您不清楚要執行什麼操作,強烈建議您不要使用此選項!

scope

  • 預設值:目前專案的範圍(如果有)或 ""
  • 類型:字串

將作業與範圍登錄相關聯。

在登入或登出私人登錄時很有用

# log in, linking the scope to the custom registry
npm login --scope=@mycorp --registry=https://registry.mycorp.com
# log out, removing the link and the auth token
npm logout --scope=@mycorp

這將導致 @mycorp 映射到登錄,以供未來根據 @mycorp/package 模式指定的套件安裝。

這還會導致 npm init 建立範圍套件。

# accept all defaults, and create a package named "@foo/whatever",
# instead of just named "whatever"
npm init --scope=@foo --yes

workspace

  • 預設值
  • 類型:字串(可以設定多次)

啟用在目前專案設定的工作空間的內容中執行命令,同時根據只執行此設定選項定義的工作空間進行篩選。

workspace 設定的有效值為

  • 工作空間名稱
  • 工作空間目錄的路徑
  • 指向父工作區目錄的路徑(將導致選取該資料夾中的所有工作區)

當設定給 npm init 指令時,這可能會設定給尚未存在的某個工作區的資料夾,以建立該資料夾並將其設定為專案中的全新工作區。

此值不會匯出到子程序的環境中。

workspaces

  • 預設值:null
  • 類型:null 或布林值

設定為 true 以在所有已設定工作區的內容中執行指令。

將此值明確設定為 false 會導致指令(例如 install)完全忽略工作區。未明確設定時

  • node_modules 樹狀結構進行操作的指令(安裝、更新等)會將工作區連結到 node_modules 資料夾。 - 對其他事項進行操作的指令(測試、執行、發佈等)會在根專案上執行,除非workspace 設定中指定一個或多個工作區。

此值不會匯出到子程序的環境中。

workspaces-update

  • 預設值:true
  • 類型:布林值

如果設定為 true,npm cli 會在可能將已安裝的工作區變更到 node_modules 資料夾的操作後執行更新。

include-workspace-root

  • 預設值:false
  • 類型:布林值

當為某個指令啟用工作區時,包含工作區根目錄。

如果為 false,則透過 workspace 設定指定個別工作區,或透過 workspaces 旗標指定所有工作區,將導致 npm 僅對指定的工作區執行操作,而不對根專案執行操作。

此值不會匯出到子程序的環境中。

另請參閱