我們可以在腳手架搭建的vue項目、react項目、anglar項目中看到package.json文件。有時候,我們同webpack,glup等打包工具也需要創建package.json文件。那么package.json的作用是什么,它的各個屬性代表的是什么意思,這是本篇文章所要講述的。
什么是package.json?
package.json是存在於JavaScript/node項目根目錄下的下的JSON文件。它保存與項目相關的元數據。並用於管理項目的依賴項,腳本,版本等
怎么創建package.json文件?
創建package.json有兩種方式
npm/yarn
npm init
yarn
yarn init
我們在終端執行npm init
命令,它將詢問一些有關項目的一些信息,並在項目的根目錄下創建一個package.json文件,生成的文件類似於
{
"name": "storemanager",
"version": "1.0.0",
"description": "",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
注意:
你也可以使用npm init -y
或者yarn init -y
生成具有默認值的package.json文件
手動創建package.json
手動的創建,需要在項目的根目錄下創建,並設定必填屬性和屬性值,如下
{
"name": "storemanager",
"version": "1.0.0"
}
package.json文件屬性
name(名稱)
name屬性是package.json文件中的必填字段,他表示項目的名稱,在package.json中設置name屬性值時,需要遵循一定的規則
- 必須是小寫的
- 必須是一個詞
- 可以包含連字符或者下划線
- 不應該用下
_
或者.
開頭
version
version也是package.json文件的必填字段。該屬性表示項目模塊的當前版本。版本字段所需要遵循的規則語義版本控制准則
engines
engines屬性是鍵/值對的json對象,用於表示指定應用程序應在其上運行的庫和運行的版本
"engines": {
"npm": "6.10.0",
"node": "10.14.1"
}
dependencies
dependencies屬性表示應用程序運行時候所需要的模塊/軟件包列表,安裝依賴后,它將被添加到dependencies列表中
"dependencies": {
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^6.1.0",
"express": "^4.16.4",
}
devDependencies
devDependencies屬性表示應用程序正常運行不需要的模塊或者軟件包列表,他們也成為開發依賴項
"devDependencies": {
"eslint": "^4.19.1",
"mocha": "^6.2.0",
"nodemon": "^1.19.1",
}
scripts
scripts屬性采用鍵/值對的JSON對象,每個腳本都可以用於執行不同的任務集,例如構建,測試,整理應用程序。您可以運行npm run scriptName或yarn scriptName在終端運行腳本
"scripts": {
"start": "node index",
"dev": "nodemon index",
"test": "jest",
"lint": "eslint ./server",
}
main
main屬性用作應用程序的入口點,並且應指向應用程序入口點文件
"main": "app.js"
homepage
homepage屬性用於指定應用程序/程序包的登錄頁面
"homepage": "https://github.com/Easybuoy/package.json-mastery#readme",
private
private屬性默認情況下為false,但也可以設置為true,以防止發布應用程序/程序包
"private": true
license
license屬性表示項目正在使用的許可證類型
"license": "MIT"
author
author屬性表示項目的創建者/作者
"author": "dehenliu"
repository
repository屬性是鍵/值對的JSON對象,用於指定用於管理應用程序的版本控制系統。您可以指定使用的版本控制的類型,存儲庫的URL以及存儲庫內的可選目錄。
"repository": {
"type": "git",
"url": "git+https://github.com/Easybuoy/package.json-mastery.git"
}
bugs
bugs屬性用於指向應用程序存儲庫的問題頁面或可以報告項目任何問題的地方
"bugs": {
"url": "https://github.com/Easybuoy/package.json-mastery/issues"
}
keywords
keywords屬性值是一組關鍵字數組,可以幫助你識別項目並且使其他用戶在搜索關鍵字的時候容易找到你的項目
"keywords": ["node", "javascript", "npm", "yarn"]
Custom Properties(自定義屬性)
package.json還可以用於特定的軟件包命令,例如babel,eslint,jest等。您可以在包裝文檔中找到用法
在jest中找的自定義屬性示例
"jest": {
"snapshotSerializers": [
"enzyme-to-json/serializer"
]
}
結合上面所有所說,我們就可以得到一個package.json文件
{
"name": "package.json-mastery",
"version": "1.0.0",
"description": "Mastery of the package.json file",
"private": false,
"main": "index.js",
"scripts": {
"start": "node index",
"dev": "nodemon index",
"test": "jest"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Easybuoy/package.json-mastery.git"
},
"keywords": [
"node",
"javascript",
"npm",
"yarn"
],
"author": "Ezekiel Ekunola",
"license": "ISC",
"bugs": {
"url": "https://github.com/Easybuoy/package.json-mastery/issues"
},
"homepage": "https://github.com/Easybuoy/package.json-mastery#readme",
"engines": {
"npm": "6.10.0",
"node": "10.14.1"
},
"dependencies": {
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^6.1.0",
"express": "^4.16.4"
},
"devDependencies": {
"eslint": "^4.19.1",
"mocha": "^6.2.0",
"nodemon": "^1.19.1"
},
"nyc": {
"exclude": [
"server/app.js",
"server/config/",
"server/build"
]
}
}
注:如果你還想了解更多的package.json的屬性,可點擊此處