開發人員

開發人員指南

選擇 CLI 版本

說明

因此,您已決定使用 npm 來開發(以及可能發布/部署)專案。

太棒了!

除了使用者安裝程式時會執行的簡單步驟外,您需要執行一些事情。

關於這些文件

這些是手冊頁面。如果您安裝 npm,您應該可以執行 man npm-thing 來取得特定主題的文件,或執行 npm help thing 來查看相同資訊。

什麼是套件

套件是

  • a) 包含由 package.json 檔案描述的程式的資料夾
  • b) 包含 (a) 的 gzip 壓縮 tarball
  • c) 解析為 (b) 的 URL
  • d) 在登錄檔中發布 (c) 的 <name>@<version>
  • e) 指向 (d) 的 <name>@<tag>
  • f) 具有滿足 (e) 的「最新」標籤的 <name>
  • g) 複製後會產生 (a) 的 git 網址。

即使您從未發布您的套件,如果您只想撰寫節點程式 (a),而且也許在將其打包成 tarball (b) 後,您也希望能夠輕鬆地在其他地方安裝它,您仍然可以獲得使用 npm 的許多好處。

Git 網址可以採用以下形式

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

commit-ish 可以是任何標籤、sha 或分支,可作為參數提供給 git checkout。預設值是儲存庫用作其預設分支的任何值。

package.json 檔案

您需要在專案的根目錄中有一個 package.json 檔案,才能使用 npm 執行許多操作。這基本上是整個介面。

請參閱 package.json,以取得關於該檔案內容的詳細資訊。至少,您需要

  • name:這應該是識別您專案的字串。請勿使用名稱指定它在節點上執行,或在 JavaScript 中。您可以使用「engines」欄位明確指出您的程式所需的節點版本(或其他任何版本),並且可以相當確定它就是 JavaScript。

    它不一定要與您的 github 儲存庫名稱相符。

    因此,node-foobar-js 是不好的名稱。 foobar 較好。

  • version:相容於 semver 的版本。

  • engines:指定您的程式執行的節點版本(或其他任何版本)。節點 API 會有許多變更,而且可能會有您依賴的錯誤或新功能。請明確指出。

  • author:自認一些功勞。

  • scripts:如果您有特殊的編譯或安裝指令碼,則應將其放入 scripts 物件中。您絕對應該至少有一個基本的煙霧測試指令碼作為「scripts.test」欄位。請參閱 scripts

  • main:如果您有一個單一模組作為程式進入點(例如「foo」套件在 require("foo") 中提供給您的內容),則需要在「main」欄位中指定它。

  • directories:這是一個將名稱對應到資料夾的物件。最佳的包含項目是「lib」和「doc」,但如果您使用「man」指定一個包含大量 man 頁面的資料夾,它們將會像這些頁面一樣安裝。

您可以使用 npm init 在套件的根目錄中,以便開始使用一個相當基本的 package.json 檔案。請參閱 npm init 以取得更多資訊。

讓檔案遠離您的套件

使用 .npmignore 檔案可將一些東西排除在套件之外。如果沒有 .npmignore 檔案,但有 .gitignore 檔案,則 npm 會忽略與 .gitignore 檔案相符的東西。如果您想包含 .gitignore 檔案所排除的內容,您可以建立一個空的 .npmignore 檔案來覆寫它。與 git 類似,npm 會在套件的所有子目錄中尋找 .npmignore.gitignore 檔案,而不僅僅是根目錄。

.npmignore 檔案遵循與 .gitignore 檔案 相同的模式規則

  • 空白行或以 # 開頭的行會被忽略。
  • 標準的 glob 模式有效。
  • 您可以在模式結尾加上正斜線 / 來指定目錄。
  • 您可以在模式開頭加上驚嘆號 ! 來否定模式。

預設情況下,下列路徑和檔案會被忽略,因此不需要將它們明確新增到 .npmignore

  • .*.swp
  • ._*
  • .DS_Store
  • .git
  • .gitignore
  • .hg
  • .npmignore
  • .npmrc
  • .lock-wscript
  • .svn
  • .wafpickle-*
  • config.gypi
  • CVS
  • npm-debug.log

此外,node_modules 中的所有內容都會被忽略,已套件化相依項除外。npm 會自動為您處理這件事,所以不要費心將 node_modules 新增到 .npmignore

下列路徑和檔案永遠不會被忽略,因此將它們新增到 .npmignore 是沒有意義的

  • package.json
  • README(及其變體)
  • CHANGELOG(及其變體)
  • LICENSE / LICENCE

如果根據專案結構,你發現 .npmignore 會造成維護上的頭痛,你也可以嘗試填入 package.jsonfiles 屬性,它是一個陣列,包含應包含在套件中的檔案或目錄名稱。有時手動挑選要允許的項目比建立封鎖清單更容易管理。

測試 .npmignorefiles 組態是否運作

如果你想仔細檢查套件在發布時是否只會包含你預期的檔案,你可以本地執行 npm pack 指令,它會在工作目錄中產生一個 tarball,就像發布時一樣。

npm link 旨在安裝開發套件,並在不需持續重新安裝的情況下即時查看變更。(當然,你還是需要重新連結或 npm rebuild -g 來更新已編譯的套件。)

更多資訊請參閱 npm link

發布前:確認套件可以安裝並運作

這很重要。

如果你無法在本地安裝,你會在嘗試發布時遇到問題。或更糟的是,你能夠發布,但你會發布一個損壞或無意義的套件。所以不要這樣做。

在套件的根目錄中執行以下動作

npm install . -g

這會顯示它正在運作。如果你只想建立一個指向工作目錄的符號連結套件,請執行以下動作

npm link

使用 npm ls -g 查看它是否在那裡。

若要測試本地安裝,請進入其他資料夾,然後執行

cd ../some-other-folder
npm install ../my-package

將其本地安裝到該其他位置的 node_modules 資料夾中。

然後進入 node-repl,並嘗試使用 require("my-thing") 來引入模組的主要模組。

建立使用者帳戶

使用 adduser 指令建立使用者。它的運作方式如下

npm adduser

然後按照提示操作。

這在 npm adduser 中有更好的說明。

發布套件

這部分很簡單。在資料夾的根目錄中執行以下動作

npm publish

你可以發佈一個 tarball 的網址、tarball 的檔名或資料夾的路徑。

請注意,預設情況下,該資料夾中的所有內容都會公開。因此,如果你有秘密資料,請使用 .npmignore 檔案列出要忽略的 glob,或從新的 checkout 發佈。

宣傳套件

發送電子郵件、撰寫部落格、在 IRC 中發言。

告訴全世界安裝你的程式有多麼容易!

另請參閱