我们可以在脚手架搭建的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的属性,可点击此处