package.json文件

1.概述

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

生成package.json文件

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

如果一個(gè)模塊不在package.json文件之中,可以單獨(dú)安裝這個(gè)模塊,并使用相應(yīng)的參數(shù),將其寫(xiě)入package.json文件之中。

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

package.json里面不能有注釋,有會(huì)報(bào)錯(cuò)

2.name

package.json中最重要的屬性是name和version兩個(gè)屬性,這兩個(gè)屬性是必須要有的,否則模塊就無(wú)法install,這兩個(gè)屬性一起形成了一個(gè)npm模塊的唯一標(biāo)識(shí)符。模塊中內(nèi)容變更的同時(shí),模塊版本也應(yīng)該一起變化。

name屬性就是你的模塊名稱

3.version

項(xiàng)目版本

4.description

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

5.keywords

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

6.scripts字段

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

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

上面代碼build命令對(duì)應(yīng)的腳本是node build.js。

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

$ npm run build
# 等同于執(zhí)行
$ node build.js

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

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

2.用戶不需要知道怎么測(cè)試你的項(xiàng)目,只要運(yùn)行npm run test即可。

查看當(dāng)前項(xiàng)目的所有 npm 腳本命令,可以使用的npm run命令。

$ npm run

7.dependencies字段

dependencies字段指定了項(xiàng)目運(yùn)行所依賴的模塊,格式為對(duì)象。該對(duì)象的各個(gè)成員,分別由模塊名和對(duì)應(yīng)的版本要求組成,表示依賴的模塊及其版本范圍。

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

版本格式如下:

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

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

3.插入號(hào)(^)+指定版本:比如^1.2.2,表示安裝1.x.x的最新版本(不低于1.2.2),但是不安裝2.x.x,也就是說(shuō)安裝時(shí)不改變大版本號(hào)。需要注意的是,如果大版本號(hào)為0,則插入號(hào)的行為與波浪號(hào)相同,這是因?yàn)榇藭r(shí)處于開(kāi)發(fā)階段,即使是次要版本號(hào)變動(dòng),也可能帶來(lái)程序的不兼容。

4.latest:安裝最新版本。

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

8.devDependencies字段

devDependencies指定項(xiàng)目開(kāi)發(fā)所需要的模塊,格式為對(duì)象。該對(duì)象的各個(gè)成員和dependencies字段的相同。

9.安裝dependencies字段和dependencies字段

package.json文件可以手工編寫(xiě),也可以使用npm init命令自動(dòng)生成。

$ npm init

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

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

$ npm install

如果一個(gè)模塊不在package.json文件之中,可以使用相應(yīng)的參數(shù),單獨(dú)安裝這個(gè)模塊,安裝后會(huì)自動(dòng)寫(xiě)入package.json文件之中。

--save參數(shù)表示將該模塊寫(xiě)入dependencies屬性,--save-dev表示將該模塊寫(xiě)入devDependencies屬性。

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

上面代碼表示單獨(dú)安裝express模塊。

注意:dependencies可以叫做線上依賴,devDependencies叫做開(kāi)發(fā)依賴,區(qū)別舉個(gè)例子來(lái)說(shuō),使用webpack開(kāi)發(fā)一個(gè)vue項(xiàng)目,需要依賴vue,以及一些編譯過(guò)程中的需要的sass插件等,開(kāi)發(fā)完打包時(shí),vue屬于線上依賴,sass插件屬于開(kāi)發(fā)依賴,打包時(shí)候nodejs會(huì)根據(jù)--save還是--save-dev來(lái)判斷,線上依賴會(huì)一起打包到項(xiàng)目里面,開(kāi)發(fā)依賴不會(huì)打包。

10.engines 字段

指明了該項(xiàng)目所需要的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屬性需要對(duì)不同的瀏覽器加上前綴。

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

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

13.private

設(shè)為true這個(gè)包將不會(huì)發(fā)布到NPM平臺(tái)下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文:http://javascript.ruanyifeng.com/nodejs/packagejson.ht...
    水墨熊貓閱讀 1,304評(píng)論 0 2
  • 每個(gè)Nodejs項(xiàng)目的根目錄下面,一般都會(huì)有一個(gè)package.json文件。該文件可以由npm init生成,定...
    brandYu閱讀 1,310評(píng)論 0 0
  • package.json文件可以手工編寫(xiě),也可以使用npm init命令自動(dòng)生成。 $ npm init 這個(gè)命令...
    流淚手心_521閱讀 8,621評(píng)論 0 4
  • 每個(gè)項(xiàng)目的根目錄下面,一般都有一個(gè)package.json文件,定義了這個(gè)項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息...
    OnlyCozj閱讀 4,337評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139

友情鏈接更多精彩內(nèi)容