package.json文件配置信息
1.概述
每個項目的根目錄下面,一般都有一個package.json
文件,定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。npm install
命令根據這個配置文件,自動下載所需的模塊,也就是配置項目所需的運行和開發環境。
下面是一個最簡單的package.json文件,只定義兩項元數據:項目名稱和項目版本。
{ "name" : "xxx", "version" : "0.0.0", }
package.json
文件就是一個JSON對象,該對象的每一個成員就是當前項目的一項設置。比如name
就是項目名稱,version
是版本(遵守“大版本.次要版本.小版本”的格式)。
下面是一個更完整的package.json文件
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中配置倉庫參數。
2.scripts的含義
scripts屬性是一個對象,裏邊指定了項目的生命周期個各個環節需要執行的命令。key是生命周期中的事件,value是要執行的命令。
具體的內容有 install start stop 等,詳見https://docs.npmjs.com/misc/scripts
scripts
指定了運行腳本命令的npm命令行縮寫,比如start指定了運行npm run start
時,所要執行的命令。
下面的設置指定了npm run start
、npm run build等
時,所要執行的命令。
"scripts": { "start": "roadhog server", "build": "roadhog build", "lint": "eslint --ext .js src test", "http": "http-server dist -p 8000" },
3.engines的含義
engines
字段指明了該模塊運行的平臺,比如 Node 的某個版本或者瀏覽器。
"engines": { "install-node": "6.9.2" },
該字段也可以指定適用的npm
版本。
"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/)
package.json文件配置信息