天天看點

NPM學習筆記

NPM學習筆記

NPM 是什麼

npm(“Node 包管理器”)是 JavaScript 運作時 Node.js 的預設程式包管理器。

npm 由兩個主要部分組成:

  • 用于釋出和下載下傳程式包的 CLI(指令行界面)工具
  • 托管 JavaScript 程式包的​​線上存儲庫​​

package.json

每個 JavaScript 項目(無論是 Node.js 還是浏覽器應用程式)都可以被當作 npm 軟體包,并且通過 ​

​package.json​

​ 來描述項目和軟體包資訊。

當運作 ​

​npm init​

​​ 初始化 JavaScript/Node.js 項目時,将生成 ​

​package.json​

​ 檔案,檔案内的内容(基本中繼資料)由開發人員提供:

  • ​name​

    ​:JavaScript 項目或庫的名稱。
  • ​version​

    ​:項目的版本。通常,在應用程式開發中,由于沒有必要對開源庫進行版本控制,是以經常忽略這一塊。但是,仍可以用它來定義版本。
  • ​description​

    ​:項目的描述。
  • ​license​

    ​:項目的許可證。

npm scripts

​package.json​

​​ 還支援一個 ​

​scripts​

​ 屬性,可以把它當作在項目本地運作的指令行工具。

{
  "scripts": {
    "build": "tsc",
    "format": "prettier --write **/*.ts",
    "format-check": "prettier --check **/*.ts",
    "lint": "eslint src/**/*.ts",
    "pack": "ncc build",
    "test": "jest",
    "all": "npm run build && npm run format && npm run lint && npm run pack && npm test"
  }
}      

​eslint​

​​,​

​prettier​

​​,​

​ncc​

​​,​

​jest​

​​ 不是安裝為全局可執行檔案,而是安裝在項目本地的 ​

​node_modules/.bin/​

​ 中

dependencies vs devDependencies

這兩個以鍵值對象的形式出現,其中 npm 庫的名稱為鍵,其​​語義格式​​版本為值。

{
  "dependencies": {
    "@actions/core": "^1.2.3",
    "@actions/github": "^2.1.1"
  },
  "devDependencies": {
    "@types/jest": "^25.1.4",
    "@types/node": "^13.9.0",
    "@typescript-eslint/parser": "^2.22.0",
    "@zeit/ncc": "^0.21.1",
    "eslint": "^6.8.0",
    "eslint-plugin-github": "^3.4.1",
    "eslint-plugin-jest": "^23.8.2",
    "jest": "^25.1.0",
    "jest-circus": "^25.1.0",
    "js-yaml": "^3.13.1",
    "prettier": "^1.19.1",
    "ts-jest": "^25.2.1",
    "typescript": "^3.8.3"
  }
}      

這些依賴通過帶有 ​

​--save​

​​ 或 ​

​--save-dev​

​​ 标志的 ​

​npm install​

​ 指令安裝。 它們分别用于生産和開發/測試環境。

  • ​^​

    ​​:表示最新的次版本,例如,​

    ​^1.0.4​

    ​​ 可能會安裝主版本系列​

    ​1​

    ​​ 的最新次版本​

    ​1.3.0​

    ​。
  • ​〜​

    ​​:表示最新的更新檔程式版本,與​

    ​^​

    ​​ 類似,​

    ​〜1.0.4​

    ​​ 可能會安裝次版本系列​

    ​1.0​

    ​​ 的最新次版本​

    ​1.0.7​

    ​。
  • 以上版本方法都是major.minor.patch 模型

major.minor.patch這三部分分别表示的含義。

1、major

major表示目前MyBatis的主版本号,它的變化通常意味着MyBatis的巨大的變化,MyBatis的前世是ibatis,是在3.0版本釋出之後才更名的,之前一直叫ibatis。

2、minor

minor稱之為MyBatis的次版本号,它通常隻反映了一些較大的更改,比如MyBatis的API的增加等等,但是這些更改并不影響與舊版本源代碼和二進制代碼之間的相容性。

3、patch

patch通常稱之為更新檔版本,通常情況下如果隻是對MyBatis内部函數的修改而不影響API接口的話都會導緻patch的變化。

package-lock.json

該檔案描述了 npm JavaScript 項目中使用的依賴項的确切版本。如果 ​

​package.json​

​​ 是通用的描述性标簽,則 ​

​package-lock.json​

​ 是成分表。

npm install

這是現在我們開發 JavaScript/Node.js 應用程式時最常用的指令。

預設情況下,​

​npm install <package-name>​

​​ 将安裝帶有 ​

​^​

​​ 版本号的軟體包的最新版本。npm 項目上下文中的 ​

​npm install​

​​ 将根據 ​

​package.json​

​​ 規範将軟體包下載下傳到項目的 ​

​node_modules​

​​ 檔案夾中,進而更新軟體包的版本(并重新生成 ​

​package-lock.json​

​​ )。 ​

​npm install <package-name>​

​​ 可以基于 ​

​^​

​​ 和 ​

​〜​

​ 版本比對

安裝不同版本

install 指令總是安裝子產品的最新版本,如果要安裝子產品的特定版本,可以在子產品名後面加上@和版本号。

npm init 初始化 package.json 檔案

用來初始化生成​

​package.json​

​檔案。在這個過程中會向使用者提問一系列問題,如果你覺得不用修改預設配置,一路回車就可以了。

如果使用了​

​-f​

​​(代表​

​force​

​​)、​

​-y​

​​(代表​

​yes​

​​),則跳過提問階段,直接生成一個新的​

​package.json​

​檔案。

避免系統權限

預設情況下,​

​Npm​

​​全局子產品都安裝在系統目錄(比如​

​/usr/local/lib/​

​​),普通使用者沒有寫入權限,需要用到​

​sudo​

​​指令。這不是很友善,我們可以在沒有​

​root​

​權限的情況下,安裝全局子產品。

首先,在主目錄下建立配置檔案​

​.npmrc​

​​,然後在該檔案中将​

​prefix​

​變量定義到主目錄下面。

prefix = /home/yourUsername/npm      

然後在主目錄下建立​

​npm​

​子目錄

$ mkdir ~/npm      

此後,全局安裝的子產品都會安裝在這個子目錄中,​

​npm​

​​也會到​

​~/npm/bin​

​目錄去尋找指令。

最後,将這個路徑在​

​.bash_profile​

​​檔案(或​

​.bashrc​

​​檔案)中加入​

​PATH​

​變量。

export PATH=~/npm/bin:$PATH      

npm uninstall

npm uninstall指令,解除安裝已安裝的子產品

$ npm uninstall [package name]

# 解除安裝全局子產品
$ npm uninstall [package name] -global      

npm run

npm 不僅可以用于子產品管理,還可以用于執行腳本。package.json 檔案有一個 scripts 字段,可以用于指定腳本指令,供npm直接調用。

npm run 指令會自動在環境變量 $PATH 添加 node_modules/.bin 目錄,是以 scripts 字段裡面調用指令時不用加上路徑,這就避免了全局安裝 NPM 子產品。

npm run 如果不加任何參數,直接運作,會列出 package.json 裡面所有可以執行的腳本指令。

yarn

初始化一個新項目

yarn init      

添加依賴包

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]      

将依賴項添加到不同依賴項類别中

分别添加到 ​

​devDependencies​

​​、​

​peerDependencies​

​​ 和 ​

​optionalDependencies​

​ 類别中:

yarn add [package] --dev
yarn add [package] --peer
yarn add [package] --optional      

更新依賴包

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]      

移除依賴包

yarn remove [package]      

安裝項目的全部依賴

yarn      

或者

yarn install      

Yarn和npm指令對比

npm yarn
npm install yarn
npm install react --save yarn add react
npm uninstall react --save yarn remove react
npm install react --save-dev yarn add react --dev
npm update --save

繼續閱讀