这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战node
在每一个node
项目或者模块的根目录下,一般会有一个叫作package.json
文件,它定义了这个项目所须要的各个模块信息和版本,以及整个项目的配置信息,例如项目的名称,版本,描述等等信息...react
大多数的开发者对package.json
的了解只是在:webpack
其实,package.json
的做用在此只是冰山一角,咱们还能够配置更多的属性来实现更多的功能,下面咱们将带你深刻认识package.json
。git
咱们经过npm init
命令来初始化一个node模块,看看它的package.json
文件。(package.json
文件能够手写出来)github
{
# 项目名称
"name": "island",
# 项目版本
"version": "1.0.0",
# 项目描述
"description": "",
# 入口文件
"main": "index.js",
# 脚本
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
# 做者
"author": "QC2168",
# 许可证
"license": "ISC"
}
复制代码
在package.json
中能够配置不少的属性,其中name
和version
属性是必不可少的,这两个属性是npm
模块的惟一标识。web
设置模块的名称,用于告知模块的名称。shell
-
)或下划线(_
)。.
)或下划线(_
)开头。{
"name": "island"
}
复制代码
设置你的模块版本号,此属性遵循版本的语义版本控制记法,这意味着版本始终以 3 个数字表示:x.x.x
。express
详细请阅读语义化版本 2.0.0:semver.org/lang/zh-CN/npm
{
"author": "QC2168"
}
复制代码
该属性是设置模块中的关键词,当咱们使用npm
检索模块时,会对模块中的description
字段和keywords
字段进行匹配,写好 package.json
中的 description
和 keywords
将有利于增长咱们模块的曝光率。若是你没有打算发布到npm
,能够忽略这个属性json
{
"keywords": ["server", "osiolabs", "express", "compression"]
}
复制代码
该属性填写的是对该模块的描述内容,方便于用户了解这个模块。同时,包管理器也会把这个值做为搜索的关键词
{
"description": "感谢你的阅读,动动你的小手来个赞"
}
复制代码
该属性是设定模块的许可证,让用户了解它们是在什么受权下使用此包,以及还有哪一些限制条件,例如MIT
开源,很宽松的协议,基本上你什么均可以干,只要保留做者版权便可。
{
"license": "MIT"
}
复制代码
该属性是告知开发者此项目 / 模块要运行的 Node.js
或其余命令的版本。
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0",
"yarn": "^0.13.0"
}
复制代码
设置模块的做者名称,你能够以字符串 / 对象的形式填写,以对象形式填写能够填写更多关于做者的详细信息。
{
"author": "QC2168"
}
or
{
"name": "QC2168",
"GitHub": "https://github.com/QC2168"
}
复制代码
你还能够在你的模块中配置其余贡献者的信息,contributors
是一个数组类型的属性,你能够以字符串 / 对象形式存放贡献者的信息。
{
"contributors": ["QC2168"]
}
or
{
"contributors": [
{
"name": "QC2168",
"GitHub": "https://github.com/QC2168"
}
]
}
复制代码
该属性设置模块的入口位置,当项目导入模块时,应用程序会在该位置搜索模块导出。
一般是项目根目录下的index.js
文件
{
"main": "src/index.js"
}
复制代码
该属性是设置该模块是否能够被发布到npm
中,一般咱们会将非开源的项目把这个属性设置为true
,可防止模块被意外发布的事情发生。
{
"private": "true"
}
复制代码
该属性是用于当咱们执行npm publish
时,只发布的目录或者文件 (如下写法指的是只发布dist
目录下的文件)。
"files": [
"dist/"
],
复制代码
定义一组npm
脚本,每次执行 npm run
,就会新建一个 shell
,而后在里面执行制定的脚本命令。
"scripts": {
"watch": "webpack --watch",
"build": "webpack --config webpack.build.config.ts",
"start": "webpack serve --config webpack.dev.config.ts"
},
复制代码
该属性用于配置脚本中使用的环境变量,用于脚本命令中,例以下面的配置,能够在脚本中使用process.env.npm_package_config_port
进行获取。
{
"config" : { "port" : "8080" }
}
复制代码
设置做为依赖安装的 npm
模块的列表。
npm install <模块名>
yarn add <模块名>
复制代码
当你使用 npm
/ yarn
安装软件模块时,模块名会自动被插入到package.json
的dependencies
属性里。
"dependencies": {
"react": "^17.0.0",
"react-dom": "^17.0.0"
},
复制代码
设置做为开发依赖安装的 npm
软件包的列表。
它们不一样于 dependencies
,由于它们只需安装在开发机器上,而无需在生产环境中运行代码。
npm install --save-dev <模块名>
yarn add --dev <模块名>
复制代码
当你使用 npm
/ yarn
安装软件模块时,模块名会自动被插入到package.json
的devDependencies
属性里。
"devDependencies": {
"webpack": "^5.38.1",
"webpack-cli": "^4.7.0",
"webpack-dev-server": "^3.11.2"
}
复制代码
该属性是指模块代码托管的地方。 这对想要了解源码、贡献的用户有帮助。,一般放的是GitHub
仓库地址
{
"repository": {
"type": "git",
"url": "https://github.com/QC2168/webpack-template.git"
}
}
复制代码
该属性填写模块问题报告的页面,这对遇到问题的小伙伴颇有帮助,它们能够经过该途径来向你反馈问题。
"bugs": {
"url": "https://github.com/QC2168/webpack-template/issues"
},
复制代码
该属性填写模块的主页 / 文档,用户能够更好的了解你的模块使用。
{
"homepage": "https://github.com/QC2168/webpack-template#readme",
}
复制代码
本文介绍了package.json
中的大部分属性和做用,并将其分类。同时,package.json
是一个Node项目的核心文件,它记录了关于整个Node项目所须要的重要信息,也是Node项目中必不可少的文件。