前端開發的時候常常用到npm安裝依賴包,初步使用的時候會跟着使用不少命令--save -dev之類的,看起來沒有太大的區別,那爲何要這麼用呢?就要深刻了解一下package.json文件。css
不少時候咱們都是站在別人的肩膀上寫代碼,會引入不少依賴包,那天然,就須要對這些包的安裝卸載有一個統一的管理。
建立package.json文件是用來管理npm依賴包的最好方式。html
那就很明確,package.json只是一個記錄文件,npm藉由這個記錄文件對依賴包進行管理。前端
那首先一開始,咱們須要生成package.json文件node
npm init
npm init --yes
express
生成文件有兩個命令,前者是手動命令,輸入後,咱們能夠手動配置項目的一些信息,不輸入直接回車,就會自動填充默認配置。npm
後者是快捷命令。顧名思義,快捷命令就是按照默認設置,直接生成文件,文件內容以下: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的後綴用途
向項目中安裝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 命令
npm install -g moduleName 命令
npm install -save moduleName 命令
npm install -save-dev moduleName 命令
總結
devDependencies 節點下的模塊是咱們在開發時須要用的,好比項目中使用的 gulp ,壓縮css、js的模塊。這些模塊在咱們的項目部署後是不須要的,因此咱們可使用 -save-dev 的形式安裝。像 express 這些模塊是項目運行必備的,應該安裝在 dependencies 節點下,因此咱們應該使用 -save 的形式安裝。
npm使用語義版本控制,或者,正如咱們常常提到的那樣,SemVer,用於管理軟件包版本和範圍。
若是你的package.json目錄中有一個文件而且你運行npm install,npm將查看該文件中列出的依賴項並使用語義版本控制下載最新版本