package.json文件配置信息

1.概述

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

下面是一個最簡單的package.json文件,只定義兩項元數據:項目名稱和項目版本。react

{
  "name" : "xxx",
  "version" : "0.0.0",
}

package.json文件就是一個JSON對象,該對象的每個成員就是當前項目的一項設置。好比name就是項目名稱,version是版本(遵照「大版本.次要版本.小版本」的格式)。jquery

下面是一個更完整的package.json文件linux

 1 { 
 2   "name": "webapp",
 3   "versuion":"1.0.0",
 4   "private": true,
 5   "scripts": {
 6     "start": "roadhog server",
 7     "build": "roadhog build",
 8     "lint": "eslint --ext .js src test",
 9     "http": "http-server dist -p 8000"
10   },
11   "engines": {
12     "install-node": "6.9.2"
13   },
14   "dependencies": {
15     "antd": "^3.0.0",
16     "aphrodite": "^1.2.5",
17     "axios": "^0.16.2",
18     "babel-polyfill": "^6.26.0",
19     "babel-runtime": "^6.9.2",
20     "classnames": "^2.2.5",
21     "console-polyfill": "^0.3.0",
22     "crypto-js": "^3.1.9-1",
23     "dva": "^2.1.0",
24     "dva-loading": "^1.0.0",
25     "echarts": "^3.8.5",
26     "echarts-for-react": "^2.0.0",
27     "global": "^4.3.2",
28     "jquery": "^3.2.1",
29     "json-server": "^0.12.1",
30     "keymaster": "^1.6.2",
31     "less-vars-to-js": "^1.2.0",
32     "mockjs": "^1.0.1-beta3",
33     "path-to-regexp": "^2.1.0",
34     "qs": "^6.5.1",
35     "rc-queue-anim": "^1.6.2",
36     "react": "^16.0.0",
37     "react-cookie": "^1.0.5",
38     "react-dom": "^16.0.0",
39     "socket.io-client": "^1.7.3",
40     "swiper": "^4.3.3"
41   },
42   "devDependencies": {
43     "babel-core": "^6.26.3",
44     "babel-eslint": "^7.1.1",
45     "babel-loader": "^7.1.4",
46     "babel-plugin-dva-hmr": "^0.3.2",
47     "babel-plugin-import": "^1.4.0",
48     "babel-plugin-transform-runtime": "^6.9.0",
49     "babel-preset-react": "^6.24.1",
50     "eslint": "^3.12.2",
51     "eslint-config-airbnb": "^13.0.0",
52     "eslint-plugin-import": "^2.2.0",
53     "eslint-plugin-jsx-a11y": "^2.2.3",
54     "eslint-plugin-react": "^6.8.0",
55     "expect": "^1.20.2",
56     "husky": "^0.12.0",
57     "redbox-react": "^1.3.2",
58     "redux-logger": "^3.0.6",
59     "roadhog": "^1.4.1"
60   }
61 }

2.各個字段的含義。

1.private的含義

若是這個屬性被設置爲true,npm將拒絕發佈它,這是爲了防止一個私有模塊被無心間發佈出去。若是你只想讓模塊被髮布到一個特定的npm倉庫,如一個內部的倉庫,可與在下面的publishConfig中配置倉庫參數。ios

2.scripts的含義

scripts屬性是一個對象,裏邊指定了項目的生命週期個各個環節須要執行的命令。key是生命週期中的事件,value是要執行的命令。
具體的內容有 install start stop 等,詳見https://docs.npmjs.com/misc/scriptsgit

scripts指定了運行腳本命令的npm命令行縮寫,好比start指定了運行npm run start時,所要執行的命令。web

下面的設置指定了npm run startnpm run build等時,所要執行的命令。express

  "scripts": {
    "start": "roadhog server",
    "build": "roadhog build",
    "lint": "eslint --ext .js src test",
    "http": "http-server dist -p 8000"
  },

3.engines的含義

engines字段指明瞭該模塊運行的平臺,好比 Node 的某個版本或者瀏覽器。npm

  "engines": {
    "install-node": "6.9.2"
  },

該字段也能夠指定適用的npm版本。json

 "engines" : { 

"npm" : "~1.0.20"
}

4.dependencies的含義

dependencies字段指定了項目運行所依賴的模塊,是一個對象,配置模塊依賴的模塊列表,key是模塊名稱,value是版本範圍,版本範圍是一個字符,能夠被一個或多個空格分割。
dependencies也能夠被指定爲一個git地址或者一個壓縮包地址。

 1 version 精確匹配版本
 2 >version 必須大於某個版本
 3 >=version 大於等於
 4 <version 小於
 5 <=versionversion 小於
 6 ~version "約等於",具體規則詳見semver文檔
 7 ^version "兼容版本"具體規則詳見semver文檔
 8 1.2.x 僅一點二點幾的版本
 9 http://... 見下面url做爲denpendencies的說明

注:不要把測試工具或transpilers寫到dependencies中。

5.devDependencies的含義

devDependencies指定項目開發所須要的模塊。

若是有人想要下載並使用你的模塊,也許他們並不但願或須要下載一些你在開發過程當中使用的額外的測試或者文檔框架。
在這種狀況下,最好的方法是把這些依賴添加到devDependencies屬性的對象中。
這些模塊會在npm link或者npm install的時候被安裝,也能夠像其餘npm配置同樣被管理,詳見npm的config文檔。
對於一些跨平臺的構建任務,例如把CoffeeScript編譯成JavaScript,就能夠經過在package.json的script屬性裏邊配置prepublish腳原本完成這個任務,而後須要依賴的coffee-script模塊就寫在devDependencies屬性種。

  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-eslint": "^7.1.1",
    "babel-loader": "^7.1.4",
    "babel-plugin-dva-hmr": "^0.3.2",
    "babel-plugin-import": "^1.4.0",
    "babel-plugin-transform-runtime": "^6.9.0",
    "babel-preset-react": "^6.24.1",
    "eslint": "^3.12.2",
    "redbox-react": "^1.3.2",
    "redux-logger": "^3.0.6",
    "roadhog": "^1.4.1"
  }

注:

dependencies字段指定了項目運行所依賴的模塊,devDependencies指定項目開發所須要的模塊。

它們都指向一個對象。該對象的各個成員,分別由模塊名和對應的版本要求組成,表示依賴的模塊及其版本範圍。

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

上面代碼表示單獨安裝express模塊,--save參數表示將該模塊寫入dependencies屬性,--save-dev表示將該模塊寫入devDependencies屬性。

3.其餘字段

6.peerDependencies的含義

有時候作一些插件開發,好比grunt等工具的插件,它們每每是在grunt的某個版本的基礎上開發的,而在他們的代碼中並不會出現require("grunt")這樣的依賴,dependencies配置裏邊也不會寫上grunt的依賴,爲了說明此模塊只能做爲插件跑在宿主的某個版本範圍下,能夠配置peerDependencies:

  "peerDependencies": {
    "tea": "2.x"
  }

7.os

能夠指定你的模塊只能在哪一個操做系統上跑:
"os" : [ "darwin", "linux" ]
也能夠指定黑名單而不是白名單:
"os" : [ "!win32" ]
服務的操做系統是由process.platform來判斷的,這個屬性容許黑白名單同時存在,雖然沒啥必要這樣搞...

8.cpu

限制模塊只能在某某cpu架構下運行
"cpu" : [ "x64", "ia32" ]
一樣能夠設置黑名單:
"cpu" : [ "!arm", "!mips" ]
cpu架構經過 process.arch 判斷

9 DEFAULT VALUES

npm設置了一些默認參數,如:
"scripts": {"start": "node server.js"}
若是模塊根目錄下有一個server.js文件,那麼npm start會默認運行這個文件。
"scripts":{"preinstall": "node-gyp rebuild"}
若是模塊根目錄下有binding.gyp, npm將默認用node-gyp來編譯preinstall的腳本
"contributors": [...]
若模塊根目錄下有AUTHORS 文件,則npm會按Name (url)格式解析每一行的數據添加到contributors中,能夠用#添加行註釋

4.參考文檔列表(https://docs.npmjs.com/)

相關文章
相關標籤/搜索