(圖片來源: wikimedia.org)
一般 npm 指令
- 新增 npm 帳號 (或至 npm 官網申請加入),若已有帳號,則用 npm login 登入即可
$ npm adduser
- 登入 npm 帳號 (第一次使用時,登入一次即可)
$ npm login
- 全域安裝模組 (需要全域安裝的模組, 通常都是一些基於 node 的命令行工具)
# [選項] 加 -g, npm 的許多選項擺前擺後都沒關係, 看個人習慣
$ npm install gulp -g
$ npm install -g mocha
$ npm install express-generator -g
$ npm install -g yo
# ... 諸如此類
- 初始化專案目錄 (產生 package.json 檔),依指示填寫資料
$ npm init
- 可先將作者資料設定好(設定會寫入 ~/.npmrc 檔),之後每次在 npm init 時,package.json 的 author 欄位就會自動填好
$ npm set init.author.name "Simen Li" $ npm set init.author.email "simenkid@gmail.com" $ npm set init.author.url "http://simeneer.blogspot.com"
- 列出專案底下所使用的模組清單
$ npm list
- 檢查專案所使用的模組是否有過期者 (非最新版本)
$ npm outdated
- 更新專案底下的模組至最新版本
# 只更新某個 module
$ npm update foo_module
# 更新全部 modules (根據 package.json 的 dependecies)
$ npm update
- 安裝 module
# 安裝某個 module, 但不自動寫入 package.json.
# [命令] install (或 i)
$ npm install foo_module
$ npm i foo_module
# 安裝模組並自動寫入 package.json 的 "dependencies"
# [選項] --save (或 -S), npm 的許多選項擺前擺後都沒關係, 看個人習慣
$ npm install foo_module --save
$ npm install --save foo_module
$ npm i foo_module -S
# 安裝某個 module, 且自動寫入 package.json 的 "devDependencies"
# [選項] --save-dev (或 -D)
$ npm install foo_module --save-dev
$ npm i foo_module -D
# 安裝模組最新版本
# [選項] @latest, -S, -D 自己搭配
$ npm install foo_module@lastest
# 安裝模組特定版本
# [選項] @x.y.z 或 @#"x.y.z". -S, -D 自己搭配
$ npm install foo_module@1.2.2
$ npm install foo_module@">=1.2.2"
# 安裝某個 tagged 模組 (若模組有打標籤, 例如 stable)
# 上面的 @latest, latest 是每次 publish 時預設會打的標籤
# [選項] @tag, -S, -D 自己搭配
$ npm install foo_module@stable
# 將模組安裝至特定目錄 (而非在預設的 ./node_modules 底下)
# [選項] --prefix path/to/somewhere
$ npm install foo_mdoule --prefix ./install/to/here
# 安裝模組,並在寫入 package.json 時鎖死版本號
# 這樣在執行 npm update 時, 該模組的版本就不會被升級
# [選項] --save-exact. -S 與 -D 擇一搭配
$ npm install foo_module --save --save-exact
$ npm install foo_module --save-dev --save-exact
$ npm install foo_module@1.2.3 --save --save-exact
# 若目錄底下已有 package.json, 依配置檔的紀錄自動安裝
# [選項] 若加 --production, 則不安裝 "devDependencies" 的模組
# 若已安裝 devDependencies, 可用 npm prune --production 事後移除
$ npm install
$ npm install --production
- 移除不需要的模組
# [選項] 加 --production, 會移除 "devDepenencies" 的所有模組
$ npm prune [--production]
- 重新建置專案 (底下用到的模組若安裝時需 build,都會重跑一次建置)
$ npm rebuild
- 將專案打包 (壓縮檔 xxx.tgz 可用於 ship 交付專案成果)
# Dependecies 不會被打包, 解開後需要重新 npm install 一次
$ npm pack
Module 開發者常用指令
底下的指令並不僅限於 module 的開發者才會用到,嚴格來說應該是,你若想把作品發佈到 npm 上,都可能會用到 (至少要 publish),不管作品是一種 library 還是一種 app。不過,如果你是 library 的開發者,那了解一下底下這些指令多少會有幫助。- 發布專案
# 若 package.json 中的版本號已存在於 registry, 發布將會失敗
# 記得在 publish 之前, 更新 package.json 中的版本號
# 更新版本號可用 version 指令, 我習慣直接改 package.json (兩者略不同)
$ npm publish
- 更新版本號
# 方法1: 直接修改 package.json 的 version 欄位
# 方法2: 使用 version 指令. 注意!這會一同上傳 version tag 到 github
# [參數] patch, minor, major (遞增 1 號)
$ npm version patch
$ npm version minor
$ npm version major
$ npm publish
- 刪除已發布專案
- 自從 left-pad 事件(源於 kik 事件),npm 的 unpublish 政策已有改變,現在已經不能隨意 unpublish 模組了,請詳閱 npm 的 unpublish policy 說明
# [選項] @version
$ npm unpublish foo_module
$ npm unpublish foo_module@1.2.3
- 為你的舊版本模組加入過時(deprecated)警告
# 例如希望使用者至少要使用 x.y.z 以上版本, 可在舊模組加上提示訊息
# 或是模組換成新的名字繼續發展, 希望提醒使用者更換模組之類的
$ npm deprecate foo_module@"< 1.2.0" "some message here"
- 為模組打上標籤 (請詳見官網說明)
# 例如為某特定版本號打上 stable, beta 之類的標籤
$ npm dist-tag add foo_module@1.8.0 stable
# publish 時加 --tag 打標籤, 注意預設 latest 標籤就不會指到最新版本
$ npm publish --tag=test
- 本地模組連結
# 開發階段指定本地 dependencies 時使用
# npm install 時會參考到本地版本 (不會複製進專案, 也不會從外部下載)
$ cd path/to/local_module_x
../local_module_x $ npm link
../local_module_x $ cd path/to/project
../project $ npm link local_module_x
../project $ npm install
- 鎖定所有相依模組版本
# 開發階段完成, 若怕以後所依賴的模組更新, 造成自身模組毀損
# 可用 shrinkwrap 將此當下的所有相依模組, 都設為絕對版本號
# 例如 "^1.2.0", "~1.2.0" 會被更改成 "1.2.0"
$ npm shrinkwrap