package.json文件
执行 npm init
命令,会在当前目录生成一个 package.json
文件
这个文档是你需要知道的关于你的 package.json
文件中需要什么的所有信息。它必须是实际的 JSON
,而不仅仅是一个 JavaScript
对象文字。
//package.json
{
//如果你打算发布你的包,在你的package.json中最重要的事情是名称和版本字段,因为它们是必需的。名称和版本一起构成了一个标识符,该标识符被认为是完全唯一的。对软件包的更改应与对版本的更改一起沿着。
// 如果您不打算发布您的软件包,则名称和版本字段是可选的。
"name": "axios",
"version": "1.7.2",
// 在里面加上描述。这是一个字符串。这有助于人们发现您的软件包,因为它在npm search中列出。
"description": "Promise based HTTP client for the browser and node.js",
// 把关键字放进去。这是一个字符串数组。这有助于人们发现您的软件包,因为它在npm search中列出。
"keywords": [
"xhr",
"http",
"ajax",
"promise",
"node"
],
// 项目主页的URL。
"homepage": "https://axios-http.com",
// 您的项目问题跟踪器的URL和/或应向其报告问题的电子邮件地址。这些对遇到您的软件包问题的人很有帮助。
"bugs": {
"url": "https://github.com/axios/axios/issues",
"email": "project@hostname.com"
},
// 你应该为你的软件包指定一个许可证,这样人们就知道他们可以如何使用它,以及你对它的任何限制。
"license": "MIT",
// "license": "BSD-3-Clause"
// "license": "(ISC OR GPL-3.0)"
// "license": "SEE LICENSE IN <filename>"
// 人员字段,email和url都是可选的。
"name": "Barney Rubble",
"email": "b@rubble.com",
"url": "http://barnyrubble.tumblr.com/",
// "author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
// 资金
"funding": {
"type": "individual",
"url": "http://example.com/donate"
},
// main字段是一个模块ID,它是程序的主要入口点。如果未设置main,则默认为包根文件夹中的index.js。
"main": "index.js",
// 如果你的模块是要在客户端使用的,那么应该使用浏览器字段而不是主字段。这有助于提示用户它可能依赖于Node.js模块中不可用的原语。
// browser 字段提供对浏览器环境更友好的模块入口。
"browser": {
"./lib/adapters/http.js": "./lib/helpers/null.js",
"./lib/platform/node/index.js": "./lib/platform/browser/index.js",
"./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js"
},
// 很多软件包都有一个或多个可执行文件,他们想安装到PATH中。npm使这变得非常容易(事实上,它使用此功能来安装“npm”可执行文件。)
// 要使用这个,请在package.json中提供一个bin字段,它是命令名到本地文件名的映射。当这个软件包被全局安装时,该文件将被链接到全局bins目录中,或者将创建一个cmd(Windows命令文件)来执行bin字段中的指定文件,因此它可以由name或name.cmd(在Windows PowerShell上)运行。当这个包作为一个依赖项安装在另一个包中时,这个文件将被链接到这个包中,它可以直接通过npm exec或通过其他脚本中的名称在通过npm run-script调用它们时使用。
"bin": {
"myapp": "bin/cli.js",
"axios": "bin/api.js"
},
// 指定代码所在的位置。这对那些想做贡献的人很有帮助。如果git repo在GitHub上,那么npm repo命令就可以找到你。
"repository": {
"type": "git",
"url": "https://github.com/axios/axios.git"
},
// 脚本
"scripts": {
"start": "node ./sandbox/server.js",
"build": "gulp clear && cross-env NODE_ENV=production rollup -c -m",
"examples": "node ./examples/server.js",
},
// “config”对象可用于设置在升级过程中持续存在的包脚本中使用的配置参数。
"config": {
"port": "8080",
},
// 依赖
// dependencies字段中声明的是项目的生产环境中所必须的依赖包。当使用 npm 或 yarn 安装npm包时,该npm包会被自动插入到此配置项中
"dependencies": {
"foo": "1.0.0 - 2.9999.9999",
"bar": ">=1.0.2 <2.1.2",
"baz": ">1.0.2 <=2.3.4",
"boo": "2.0.1",//完全等于
"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
"asd": "http://asdf.com/asdf.tar.gz",
"elf": "~1.2.3",//相似版本
"two": "2.x",//
"lat": "latest",
"antd": "^5.12.8",
"antd-img-crop": "^4.12.2",
"antd-style": "^3.6.1",
// 本地路径
"bar": "file:../foo/bar",
// 本地路径 直接链接到项目下的ckeditor5目录
"ckeditor5-custom-build": "file:./ckeditor5",
},
// devDependencies中声明的是开发阶段需要的依赖包,如Webpack、Eslint、Babel等,用于辅助开发。它们不同于 dependencies,因为它们只需安装在开发设备上,而无需在生产环境中运行代码。当打包上线时并不需要这些包,所以可以把这些依赖添加到 devDependencies 中,这些依赖依然会在本地指定 npm install 时被安装和管理,但是不会被安装到生产环境中。
"devDependencies": {
},
// 在某些情况下,你想表达你的包与宿主工具或库的兼容性,而不一定要做这个宿主的require。这通常被称为插件。
// 有些情况下,我们的项目和所依赖的模块,都会同时依赖另一个模块,但是所依赖的版本不一样。比如,我们的项目依赖A模块和B模块的1.0版,而A模块本身又依赖B模块的2.0版。大多数情况下,这不是问题,B模块的两个版本可以并存,同时运行。但是,有一种情况,会出现问题,就是这种依赖关系将暴露给用户。
// 最典型的场景就是插件,比如A模块是B模块的插件。用户安装的B模块是1.0版本,但是A插件只能和2.0版本的B模块一起使用。这时,用户要是将1.0版本的B的实例传给A,就会出现问题。因此,需要一种机制,在模板安装的时候提醒用户,如果A和B一起安装,那么B必须是2.0模块。
// peerDependencies字段就是用来供插件指定其所需要的主工具的版本。
// npm3.0版本开始 不会默认安装了
"peerDependencies": {
"tea": "2.x"
},
// bundledDependencies配置项是一个数组,数组里可以指定一些模块,这些模块将在这个包发布时被一起打包。
// 需要注意,这个字段数组中的值必须是在dependencies, devDependencies两个里面声明过的包才行
"bundledDependencies":[],
// 如果需要在找不到包或者安装包失败时,npm仍然能够继续运行,则可以将该包放在optionalDependencies对象中,optionalDependencies对象中的包会覆盖dependencies中同名的包,所以只需在一个地方进行设置即可。
// 需要注意,由于optionalDependencies中的依赖可能并为安装成功,所以一定要做异常处理,否则当获取这个依赖时,如果获取不到就会报错。
"optionalDependencies":{
},
// 引擎
// 当我们维护一些旧项目时,可能对npm包的版本或者Node版本有特殊要求,如果不满足条件就可能无法将项目跑起来。为了让项目开箱即用,可以在engines字段中说明具体的版本号
// 需要注意,engines只是起一个说明的作用,即使用户安装的版本不符合要求,也不影响依赖包的安装
"engines": {
"node": ">=0.10.3 <15",
"npm": "~1.0.20"
},
// 操作系统
"os": ["darwin", "linux","!win32"],
//
"cpu": ["x64", "ia32","!arm", "!mips"],
// 如果你在package.json中设置了"private": true,那么npm将拒绝发布它。
"private": true,
"module": "",
"types": "",
"type": "module",//支持使用es module
}
详细字段描述:https://docs.npmjs.com/cli/v10/configuring-npm/package-json