npm關於package.json安裝的那些事

前端開發的時候常常用到npm安裝依賴包,初步使用的時候會跟着使用不少命令--save -dev之類的,看起來沒有太大的區別,那爲何要這麼用呢?就要深刻了解一下package.json文件。css

package.json是什麼

不少時候咱們都是站在別人的肩膀上寫代碼,會引入不少依賴包,那天然,就須要對這些包的安裝卸載有一個統一的管理。
建立package.json文件是用來管理npm依賴包的最好方式。html

那就很明確,package.json只是一個記錄文件,npm藉由這個記錄文件對依賴包進行管理。前端

那首先一開始,咱們須要生成package.json文件node

建立package.json文件

npm init
npm init --yesexpress

生成文件有兩個命令,前者是手動命令,輸入後,咱們能夠手動配置項目的一些信息,不輸入直接回車,就會自動填充默認配置。npm

clipboard.png

後者是快捷命令。顧名思義,快捷命令就是按照默認設置,直接生成文件,文件內容以下:json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

根據文件咱們能夠看到一些基本的內容,分別的意思是:gulp

name:當前目錄名稱
version:永遠是 1.0.0
description:來自自述文件的信息或空字符串 ""
main:永遠是 index.js
scripts:默認狀況下會建立一個空test腳本
keywords:空的
author:空的
license: ISC
bugs:來自當前目錄的信息(若是存在)
homepage:來自當前目錄的信息(若是存在)

對於package.json來講,name與version是必須的,也有必定的要求。測試

"name"spa

  • 全是小寫的
  • 一個詞,沒有空格
  • 容許破折號和下劃線

"version"

  • 以x.x.x的形式
  • 遵循semver規範

也可使用初始命令配置一些選項

npm set init.author.email "wombat@npmjs.com"
npm set init.author.name "ag_dubs"
npm set init.license "MIT"

若是文件中中沒有描述字段,package.json就會使用README.md或README 的第一行。該描述可幫助人們在搜索npm時找到您的包,所以在package.json中寫入自定義描述,可讓人更容易找到包。

總的來講:

package.json文件

  • 列出了項目依賴的全部包
  • 容許你使用語義版本控制規則指定項目可使用的包的版本
  • 使您的構建可重現,所以更容易與其餘開發人員共享

依賴包的管理

除了上面介紹的基本信息以外,就是咱們的核心信息——項目中所使用的全部依賴包。

仔細發現的話,咱們會在package.json文件中找到兩種類型的依賴包列表:

"dependencies":項目在生產環境中須要的包。
"devDependencies":開發和測試中須要的包。

例如,下面的項目使用my_dep與生產中的主要版本1匹配的任何版本的軟件包,而且須要my_test_framework與主要版本3匹配的任何版本的軟件包,但僅用於開發:

{
  "name": "my_package",
  "version": "1.0.0",
  "dependencies": {
    "my_dep": "^1.0.0"
  },
  "devDependencies" : {
    "my_test_framework": "^3.1.0"
  }
}

那如何控制安裝依賴包分別到兩個列表裏呢?這就是npm install的後綴用途

--save和--save-dev安裝區別

向項目中安裝package.json中的依賴包的更簡單(也更棒的)方法,是從命令行npm install執行此操做,使用--save或 標記命令--save-dev,具體取決於但願如何使用該依賴項。

一個條目添加到您package.json的dependencies:

npm install <package_name> --save

一個條目添加到您package.json的devDependencies:

npm install <package_name> --save-dev

咱們在使用 npm install 安裝模塊的模塊的時候 ,通常會使用下面這幾種命令形式:

npm install moduleName
安裝模塊到項目目錄下

npm install -g moduleName
-g 的意思是將模塊安裝到全局,具體安裝到磁盤哪一個位置,要看 npm config prefix 的位置。

npm install -save moduleName
-save 的意思是將模塊安裝到項目目錄下,並在package文件的dependencies節點寫入依賴。

npm install -save-dev moduleName
-save-dev 的意思是將模塊安裝到項目目錄下,並在package文件的devDependencies節點寫入依賴。

那麼問題來了,在項目中咱們應該使用四個命令中的哪一個呢?這個就要視狀況而定了。下面對這四個命令進行對比,看完後你就再也不這麼問了。

npm install moduleName 命令

  1. 安裝模塊到項目node_modules目錄下。
  2. 不會將模塊依賴寫入devDependencies或dependencies 節點。
  3. 運行 npm install 初始化項目時不會下載模塊。

npm install -g moduleName 命令

  1. 安裝模塊到全局,不會在項目node_modules目錄中保存模塊包。
  2. 不會將模塊依賴寫入devDependencies或dependencies 節點。
  3. 運行 npm install 初始化項目時不會下載模塊。

npm install -save moduleName 命令

  1. 安裝模塊到項目node_modules目錄下。
  2. 會將模塊依賴寫入dependencies 節點。
  3. 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
  4. 運行npm install --production或者註明NODE_ENV變量值爲production時,會自動下載模塊到node_modules目錄中。

npm install -save-dev moduleName 命令

  1. 安裝模塊到項目node_modules目錄下。
  2. 會將模塊依賴寫入devDependencies 節點。
  3. 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
  4. 運行npm install --production或者註明NODE_ENV變量值爲production時,不會自動下載模塊到node_modules目錄中。

總結

devDependencies 節點下的模塊是咱們在開發時須要用的,好比項目中使用的 gulp ,壓縮css、js的模塊。這些模塊在咱們的項目部署後是不須要的,因此咱們可使用 -save-dev 的形式安裝。像 express 這些模塊是項目運行必備的,應該安裝在 dependencies 節點下,因此咱們應該使用 -save 的形式安裝。

管理依賴版本

npm使用語義版本控制,或者,正如咱們常常提到的那樣,SemVer,用於管理軟件包版本和範圍。

若是你的package.json目錄中有一個文件而且你運行npm install,npm將查看該文件中列出的依賴項並使用語義版本控制下載最新版本

參考原文Working with package.json
參考npm install

相關文章
相關標籤/搜索