npm 常用命令指南



(圖片來源: 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
# [選項] @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

simen

An enthusiastic engineer with a passion for learning. After completing my academic journey, I worked as an engineer in Hsinchu Science Park. Later, I ventured into academia to teach at a university. However, I have now returned to the industry as an engineer, again.

Post a Comment (0)
Previous Post Next Post