package.json文件

1.概述

每個項目的根目錄下面,一般都有一個package.json文件,定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。npm install命令根據這個配置文件,自動下載所需的模塊,將package.json中的模塊安裝到node-modules文件夾下,也就是配置項目所需的運行和開發環境。

生成package.json文件

package.json文件可以手工編寫,也可以使用npm init命令自動生成。這個命令采用互動方式,要求用戶回答一些問題,然后在當前目錄生成一個基本的package.json文件。所有問題之中,只有項目名稱(name)和項目版本(version)是必填的,其他都是選填的。注:如果你一路按回車確認感覺有些麻煩,你可以直接加一個-y參數,這樣npm就直接給我們生成了,即npm init -y有了package.json文件,直接使用npm install命令,就會在當前目錄中安裝所需要的模塊。

如果一個模塊不在package.json文件之中,可以單獨安裝這個模塊,并使用相應的參數,將其寫入package.json文件之中。

$ npm install express --save
$ npm install express --save-dev

package.json里面不能有注釋,有會報錯

2.name

package.json中最重要的屬性是name和version兩個屬性,這兩個屬性是必須要有的,否則模塊就無法install,這兩個屬性一起形成了一個npm模塊的唯一標識符。模塊中內容變更的同時,模塊版本也應該一起變化。

name屬性就是你的模塊名稱

3.version

項目版本

4.description

一個描述,方便別人了解你的模塊作用,搜索(npm search)的時候也有用,格式為字符串

5.keywords

關鍵字。方便使用者在 npm search中搜索。格式為字符串

6.scripts字段

npm 允許在package.json文件里面,使用scripts字段定義腳本命令。

{
  // ...
  "scripts": {
    "build": "node build.js",
    "preinstall": "echo here it comes!"
  }
}

上面代碼build命令對應的腳本是node build.js。

命令行下使用npm run命令,就可以執行這段腳本

$ npm run build
# 等同于執行
$ node build.js

這些定義在package.json的命令(scripts)就稱為 npm 腳本。它的優點很多。

1.npm 提供的很多輔助功能。

2.用戶不需要知道怎么測試你的項目,只要運行npm run test即可。

查看當前項目的所有 npm 腳本命令,可以使用的npm run命令。

$ npm run

7.dependencies字段

dependencies字段指定了項目運行所依賴的模塊,格式為對象。該對象的各個成員,分別由模塊名和對應的版本要求組成,表示依賴的模塊及其版本范圍。

"deependencies": {
    "browserify": "~13.0.0",
    "karma-browserify": "~5.0.1"
}

版本格式如下:

1.指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式規定,安裝時只安裝指定版本。

2.波浪號(~)+指定版本:比如~1.2.2,表示安裝1.2.x的最新版本(不低于1.2.2),但是不安裝1.3.x,也就是說安裝時不改變大版本號和次要版本號

3.插入號(^)+指定版本:比如^1.2.2,表示安裝1.x.x的最新版本(不低于1.2.2),但是不安裝2.x.x,也就是說安裝時不改變大版本號。需要注意的是,如果大版本號為0,則插入號的行為與波浪號相同,這是因為此時處于開發階段,即使是次要版本號變動,也可能帶來程序的不兼容。

4.latest:安裝最新版本。

默認在版本發布上,一個版本有三部分:X, Y, Z,分別指代大版本,小版本,與查缺補漏版本。比如1.2.3,那么就是大版本1,小版本2,bugfix版本3。bugfix版本不會影響任何功能,小版本變更往往是增加新功能,也不會影響使用。而大版本變更往往會帶來使用層面不兼容的情況。

8.devDependencies字段

devDependencies指定項目開發所需要的模塊,格式為對象。該對象的各個成員和dependencies字段的相同。

9.安裝dependencies字段和dependencies字段

package.json文件可以手工編寫,也可以使用npm init命令自動生成。

$ npm init

這個命令采用互動方式,要求用戶回答一些問題,然后在當前目錄生成一個基本的package.json文件。所有問題之中,只有項目名稱(name)和項目版本(version)是必填的,其他都是選填的。

有了package.json文件,直接使用npm install命令,就會在當前目錄中安裝所需要的模塊。

$ npm install

如果一個模塊不在package.json文件之中,可以使用相應的參數,單獨安裝這個模塊,安裝后會自動寫入package.json文件之中。

--save參數表示將該模塊寫入dependencies屬性,--save-dev表示將該模塊寫入devDependencies屬性。

$ npm install express --save
$ npm install express --save-dev

上面代碼表示單獨安裝express模塊。

注意:dependencies可以叫做線上依賴,devDependencies叫做開發依賴,區別舉個例子來說,使用webpack開發一個vue項目,需要依賴vue,以及一些編譯過程中的需要的sass插件等,開發完打包時,vue屬于線上依賴,sass插件屬于開發依賴,打包時候nodejs會根據--save還是--save-dev來判斷,線上依賴會一起打包到項目里面,開發依賴不會打包。

10.engines 字段

指明了該項目所需要的node.js版本。也可以指定適用的npm版本

 "engines": {
    "node": ">= 4.0.0",
    "npm": ">= 3.0.0"
  },

11.Repository字段

用于指示源代碼存放的位置

"repository" :{
   "type" : "git",
   "url" : "http://github.com/npm/npm.git"
 }
 
"repository" :{
   "type" : "svn",
   "url" : "http://v8.googlecode.com/svn/trunk/"
 }

12.browserslist

眾所周知為兼容所有瀏覽器,有的CSS屬性需要對不同的瀏覽器加上前綴。

Autoprefixer使用Browserlist來確定哪些瀏覽器版本將得到支持從而添加前綴。格式為數組。

 "browserslist": [
    "> 1%", //全球有超過1%的人使用的瀏覽器
    "last 2 versions", //根據CanIUse.com追蹤的最后兩個版本的所有瀏覽器
    "not ie <= 8" // 不支持ie8及以下
  ]

13.private

設為true這個包將不會發布到NPM平臺下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容