1. 程式人生 > >常用的 npm 命令

常用的 npm 命令

寫在前面
npm 有很多命令,有很多並不常用,而有些則非常常用,還有些很有用,但很多人卻不知道,下面列出了一些常見和一些非常有用的命令,並詳細說明了它的用法。

ls (alias list, la, ll)
使用該命令可以列出當前專案依賴的模組,比較常見的引數有 depth

只列出最上層的依賴

npm ls --depth=0
使用 npm la 可以一併列出模組的簡要說明(也就是存在於 description 中的內容)。

link
這是一個相當有用的命名,對於開發這很重要。設想一下場景:

你在開發一個模組 A,同時需要在另外一個專案 B 中測試它,你當然可以將該模組的程式碼移動到需要使用它的專案中,但這也不是理想的方法。

此時可以使用 link 來解決。npm link 的使用分為兩步。

第一步

在模組 A 的專案根目錄下執行 npm link,這個時候 npm 會將模組 A 通過連結安裝在全域性。

第二步

在專案 B 的根目錄下執行 npm link A,此後就可以在專案 B 中使用 require(‘A’) 來使用 A 模組了。因為只是連結,所以 A 模組的任何修改,都會事實地同步過來。

install (alias i)
這個命令想必都很熟悉了,用來安裝模組。只是安裝模組的來源有很多種,有來自 git 地址的,有來自 npm 的,有來自 github 倉庫的,如何來安裝這些來自不同途徑的模組呢?

npm install

不帶任何引數,這會安裝 package.json 中記錄的模組。

npm install

從 npm 源上安裝一個模組

npm install @<version|tag>

從 npm 源上安裝指定版本或者 tag 的模組

npm install

從一個 git 地址上安裝模組,比如:

npm install git+ssh://[email protected]:npm/npm.git#v1.0.27
npm install git+https://[email protected]/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
npm install /[#]

從 github 上的每個開發這的倉庫裡安裝,比如安裝最新的 express:

預設會安裝 master 分支

npm i expressjs/express

安裝 5.0 分支

npm i expressjs/express#5.0
npm install file:

從本地檔案系統安裝,比如:

npm i file:…/moduleA
安裝上層目錄的 moduleA

安裝來源真非常多,更多方式請參考 npm install。

uninstall
移除一個模組,這會移除某個模組自身和其依賴,為了將其從 package.json 中也刪除,需要新增 --save 或者 --save-dev 選項。

shrinkwrap
npm 推薦開發者使用 semver 來設定模組的版本號,而且 npm 預設使用 ^1.0.0 這種形式來記錄版本(關於這 ^ 代表什麼,請參照前面的文章),初衷是讓開發者能夠時刻使用確保功能正常且又是最新的程式碼。但不能保證開發者遵守了這個規定。且即使在 dependencies 中明確寫定某個模組的版本,也不能保證該模組依賴的模組的版本在下次升級的時候不會改變。

模組的不確定性導致開發階段表現良好的程式碼,在部署以後出現了問題。為此需要做的是限定在下次安裝的時候也只使用特定的版本。有的團隊採用將 node_modules 也納入版本管理的方案,只是這種方案存在太多缺點,程式碼庫過大,某些在安裝時候需要根據不同平臺進行編譯的模組無法正常工作,等等。

npm shrinkwrap 可以記錄下當前專案使用的所有的模組的版本,並將他們記錄在一個 npm-shrinkwrap.json 的檔案中,在下次安裝的時候 npm 會使用這裡面記錄的模板的版本來安裝,這保證了下次安裝的時候會使用和上次完全一致的版本。

如何使用 npm shrinkwrap

執行 npm install 安裝所有模組
測試你的程式碼,保證沒有問題
執行 npm shrinkwrap,並將產物 npm-shrinkwrap.json 納入版本管理。
當你增加或者移除了依賴,這個時候需要重新生成一下 npm-shrinkwrap.json。之前的文章提到過,安裝模組的順序不同,會導致 node_modules 的結構不同,因此在增加或者移除了依賴後,可以刪掉 node_modules 重新執行一次 npm i。

使用了 shrinkwrap 之後,使用者在安裝你的模組的時候也會安裝符合你的模組要求的依賴,這樣可以有效地避免因為依賴升級導致自己的專案掛掉。當然了,及時這樣也不能保證,完全不會出問題,如果一個模組的維護者,強制更新了程式碼但是沒有更改版本號,這還是可能會出現問題,所以在使用第三方模組的時候要小心選擇。

run
我想這個命令的使用頻率僅次於 install 了。在 npm 的基本用法 一文中提到了 npm script,npm run 就是用來執行這些指令的。

比如在 package.json 中有這樣的內容:

{
“scripts”:{
“build”: “webpack”
}
}
為了執行 build 命令,需要執行 npm run build,在使用 npm run 的時候會將 node_modules/.bin 加入環境變數 PATH 中,在命令執行完了再移除,因此你不需要寫成:

“build”: “./node_modules/.bin/webpack”
如果需要在命令列中給 webpack 傳入一些引數,比如想要執行 webpack -p,這時候執行 npm run build -p 不會得到想要的結果,因為這裡的 -p 應該傳給 npm 還是傳給你的指令碼,很難說,你需要執行 npm run build – -p, npm 會將 – 後面的內容全部傳給你的指令碼。

執行 npm run 不帶任何引數,會列出當前所有可用的 npm script。

關於 npm script 的內容後面還會細說。

adduser (alias login)
在釋出模組的時候常常要先進行登入,這個時候就需要用到該命令,鍵入 npm adduser 後會要求輸入使用者名稱,密碼,郵箱,預設是登入到 npm 上,如要登入到其他源上,需要使用 registry 選項,要想登入到某個 scope 中需要使用 scope 選項:

npm adduser --registry=http://myregistry.example.com [email protected]
whoami
就像 *nux 系統裡面的 whoami 一樣,npm whoami 會打印出當前登入的使用者名稱,你可能登入過多個倉庫,比如 npm 的,公司的 npm 等,此時需要指定 --registry 選項來看自己在某個 npm 源上登入的使用者。

npm whoami --registry https://registry.npm.taobao.org
npm 有很多有用的命令,知道了這些常用的命令的使用方法,以及適用場景能夠極大地加快效率,畢竟是每天都要使用的工具,有必要了解它、熟悉它。下一篇文章,準備談談 npm script 的相關知識。

相關推薦

常用npm命令總結

初始化(生成package.json): npm init  安裝package.json中的所有包:npm install 全域性安裝(在安裝命令列工具時使用全域性安裝,如npm install vue-cli -g): npm install <package> -g 本地安裝: np

node.js常用npm命令

本文主要介紹npm的常用命令,如果用過淘寶映象cnpm同樣適用。特別注意,此處的指令多為node.js的依賴包,所以node.js是必不可少。 一、安裝node.js的依賴包 Tips:每次都要開啟cmd,進行指令操作,後續就不再提醒了。 n

nodejs---常用npm命令

npm install <name>安裝nodejs的依賴包 例如npm install express 就會預設安裝express的最新版本,也可以通過在後面加版本號的方式安裝指定版本,如npm install [email protected] n

常用npm命令

npm命令 order 安裝 http ini pan -- 標準 精簡 npm ls -g 列出全局安裝的所有模塊 npm ls webpack -g 查看全局安裝的模塊版本信息 npm view webpack versions 查

vue和webpack專案構建過程常用npm命令

vue //最新穩定版 cnpm install vue //全域性安裝 vue-cli cnpm install --global vue-cli //建立一個基於 webpack 模板的新專案 vue init webpack my-project //進入專案目錄,執行

npm 常用安裝命令

首先新建一個資料夾installdemo,在目錄按shift+右鍵 點選“在此處開啟powershell視窗 初始化專案npm init,目的是生成package.json檔案,一直按回車就行 檢視package.json檔案 沒什麼內容, 來個最常

常用npm 命令

寫在前面 npm 有很多命令,有很多並不常用,而有些則非常常用,還有些很有用,但很多人卻不知道,下面列出了一些常見和一些非常有用的命令,並詳細說明了它的用法。 ls (alias list, la, ll) 使用該命令可以列出當前專案依賴的模組,比較常見的引數有

常用 Git 命令清單

stage 遠程倉庫 spa reset 一行 發生 per pan comm 下面是我整理的常用 Git 命令清單。幾個專用名詞的譯名如下。 Workspace:工作區 Index / Stage:暫存區 Repository:倉庫區(或本地倉庫

vim最常用命令

set ctr 當前 選擇 執行 其中 nbsp 關閉 跳轉 編譯示例:g++ -o hello hello.cpp -std=c++11 ,其中-std=c++11表示支持C++111新特性 按下Esc後的命令模式執行 a

MAC下一些常用命令

用戶名 通配符 隱藏 -a 追加 htm 空格 nbsp 工作 統計了一下工作中一些會常用到的簡單命令,加強記憶 ls  查看當前終端目錄下面的文件   ls -a  "ls -a"會出現一些帶.xxxx的文件名,列出所有內

redis的五大數據類型以及與 key 關鍵字相關的常用操作命令

redis數據類型 key關鍵字相關的指令 redis學習 1、redis的五大數據類型: 先來看看redis官方網上文檔 的介紹: 這裏簡單地說,就是redis不是一個普通的 key-value 存儲,而是一個數據結構服務器,支持各種不同 類型的值,這

常用 adb 命令總結

包名 andro 所有 help ngs shel 命令幫助 oot pac 1. 顯示當前運行的全部模擬器: adb devices 2. 安裝應用程序: adb install -r 應用程序.apk 3. 獲取模擬器中的文件:

常用DOS命令

exit 名稱 刪除文件夾 文件內容 文件類型 退回 命令行 宋體 nbsp 盤符:切換盤符【c:】 dir : 列出當前目錄下的文件以及文件夾【dir】 md : 創建目錄(創建文件夾)【md 文件夾名稱】 rd : 刪除目錄(刪除文件夾,有一個前提文件

老男孩教育每日一題-2017-05-15-說說你在vi/vim中常用命令或快捷鍵

vi-vim編輯器 linux編輯器 每日一題 1.題目老男孩教育每日一題-2017-05-15-說說你在vi/vim中常用的命令或快捷鍵2.參考答案01:學會在vim中查詢幫助:help 或:h即可 :help G :help :wq02.vi/vim 使用最基本方法第一個裏程碑-使用vi打開o

Linux常用基本命令

顯示 -h 使用 shutdown str shu date syn 常用 1、顯示日期的指令: date 2、顯示日歷的指令:cal cal 顯示本月 cal 4 2017 顯示2017年4月的日歷 cal 2017 顯示2017年12個月的日歷 3、簡單好用

常用CMD命令

tcp/ip 不能 tmg 不出 超級 我們 啟動 xp系統 delete 一,ping     它是用來檢查網絡是否通暢或者網絡連接速度的命令。作為一個生活在網絡上的管理員或者黑客來說,ping命令是第一個必須掌握的DOS命令,它所利用的原理是這樣的:網絡上的機器都有唯一

網絡測試常用命令-比較ping,tracert和pathping等命令之間的關系

tracer fcm 超時 cee rac 程序 最大 探測 ack 下面我們逐步介紹幾個常 1、Ping命令。 當您的機器不能訪問Internet,首先確認是否是本地局域網的故障。假定局域網的代理服務器IP地址為202.168.0.1,您可

常用Linux命令

檔案 根目錄 java bsp linux命令 文本 log down 殺死進程 cd:改變目錄 如cd /即可改變到根目錄 ls:顯示文件名 可以結合cd使用,ls可以顯示當前目錄下的文件名 pwd:顯示當前工作路徑 rm:刪除文件 cat:顯示文本文件內容 less:分

linux下一些常用操作命令

linux 防火墻 端口 1、兩個服務器ssh免授權:ssh-keygen -t rsa 一直回車至結束ssh-copy-id -i /root/.ssh/id_rsa.pub 遠程ip 然後回車 輸入遠程ip密碼搞定,以後訪問就不用驗證密碼了2、壓縮和解壓縮命令: .tar

redis數據庫的五種數據結構常用命令

hset geb scores 添加 set -1 with 有序 sadd 1.字符串   set  設置鍵值對     set name xiaozhang    get  獲取鍵相對應的鍵值             get name      當該鍵不存在時則返回ni