package.json
清单文件(也称为package.json)包含描述一个特定程序包唯一的设置所需的所有内容。
如果项目使用工作空间功能,则项目将包含多个这样的清单,因为每个工作空间都是通过其自己的清单来描述的
- {
- // 包的名称,用于在整个应用程序中标识它
- // 尤其是在多个工作空间中。名称的第一部分(此处为@namespace/)是可选的,用作名称空间
- // 不能以 ,(逗号)/.(句号)/大写字母/空格/下滑线
- "name": "@namespace/name",
- // 版本.通常它对您的项目没有任何影响,除非它是一个工作空间
- // 然后其版本必须与指定的范围相匹配,才能选择该工作空间作为解决方案的候选对象
- // [主版本号.次版本号.修订号](https://semver.org/lang/zh-CN/)
- "version": "1.2.3",
- // 目前处于实验阶段
- // 文档:https://nodejs.org/dist/latest-v18.x/docs/api/packages.html#packagemanager
- // 'packagemanager'字段定义了在处理当前项目时应使用的包管理器
- // 它可以设置为任何受支持的包管理器,并将确保您的团队使用完全相同的包管理程序版本,而无需安装Node.js以外的任何其他软件
- // vue3中强制使用'pnpm', 例:"packageManager": "pnpm@8.6.2"
- // 或者使用yarn的某个版本, 例:"packageManager": "yarn@1.22.19"
- "packagemanager": "<package manager name>@<version>",
- // 指定加载的入口文件
- // 当不指定main 字段时,默认值是模块根目录下面的 index.js 文件
- // 可以在发布时通过使用该字段来修改此publishConfig.main字段
- // 通过require('my-module') 返回的是 main 字段中所列出文件的 module.exports 属性
- "main": "./sources/index.js",
- // 指定要放置的单个文件或文件名数组,以便man程序查找。
- // 如果只提供了一个文件,那么无论其实际文件名如何,都会将其安装为man<pkgname>的结果
- "man": "man/index.1.js"
- "man": [
- "./man/index.1.js",
- ".man/index.1.js"
- ],
- // 与ES6兼容的环境尝试按包的名称访问包时将使用的路径
- // 例: imort x from 'X' 对应的路口文件
- "module": "./sources/index.mjs",
- // commonjs(默认值) / module(ES Module 语法,适用于浏览器环境(客户端))
- // 无论此选项如何,当使用pnp时,Yarn 3+都将生成.pnp.js文件
- // 如果项目中类型声明文件存储在 ./types 文件夹中,则可以在 package.json 中设置 "type": "./types"
- "type": "commonjs",
- // 该模块运行的平台,比如 Node 的某个版本或者浏览器
- // 该字段也可以指定适用的 npm 版本
- "engines": {
- "node": ">=12.18.3",
- "npm": ">7.0.0"
- },
- // true:该包裹将被视为私人包,无论在何种情况下,Yarn都将拒绝公布。
- // 设置此标志还可以解锁一些在已发布的包中没有意义的功能,例如工作区。
- "private": true,
- // SPDX标识符
- // MIT License是一种非常宽松的协议。它本身的条款非常简单明了
- // GPL 是最多约束的
- // 您可以查看 [SPDX 许可证 ID 的完整列表](https://spdx.org/licenses/)
- "license": "MIT",
- // 该字段用于列出在运行 yarn run 时将要执行的小型 shell 脚本。
- // 请包含:(冒号)的脚本是项目的全局变量,无论你当前的工作空间如何,都可以调用它们。
- // 脚本总是相对于最近的工作空间(而不是 cwd)执行。
- /**
- NPM 脚本的原理:
- 每当执行 npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。
- 因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。
- 比较特别的是,npm run 新建的这个 Shell,
- 会将当前目录的 node_modules/.bin 子目录加入 PATH 变量,
- 执行结束后,再将 PATH 变量恢复原样。
- 当前目录的 node_modules/.bin 子目录里面的所有脚本,
- 都可以直接用脚本名调用,而不必加上路径
- **/
- // 由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面
- // npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是0,npm 就认为这个脚本执行失败。
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- // 当执行npm test命令,就会引用 npm_package_config_port 环境变量
- // 如上面的配置npm test时,就会通过端口8080启动
- // 但是用户可以通过执行例如 npm config set foo:port 8001 来覆盖config配置
- "config": {
- "port": "8080"
- },
- // 应用依赖,或者叫做业务依赖/生产环境依赖,这是我们最常用的依赖包管理对象!
- // 它用于指定应用依赖的外部包,这些依赖是应用发布后正常执行时所需要的
- // npm install --save <packagename>
- "dependencies": {
- "vue": "^3.2.37",
- },
- // 开发环境依赖,仅次于dependencies的使用频率!
- // 只用于开发环境,不用于生产环境,这些包通常是单元测试或者打包工具等,例如gulp, webpack, moca等
- // npm install --save-dev <packagename>
- // yarn add --dev <packagename>
- "devDependencies": {
- "vite": "^3.0.0",
- },
- // 在某些情况下,您希望表达包与主机工具或库的兼容性,而不一定要对此主机进行要求。这通常被称为插件。
- // 值得注意的是,您的模块可能会暴露主机文档所期望和指定的特定接口。
- "peerDependencies": {
- "tea": "2.x",
- "soy-milk": "1.2"
- },
- // 当用户安装您的程序包时,如果peerDependencies中指定的程序包尚未安装,npm将发出警告
- // peerDependenciesMeta字段用于向npm提供有关如何使用对等依赖关系的更多信息
- // 具体来说,它允许将对等依赖关系标记为可选
- "peerDependenciesMeta": {
- "soy-milk": {
- "optional": true
- }
- },
- // 发布包时将绑定的包名称数组。
- // 如果您需要在本地保留npm包或通过单个文件下载使其可用,
- // 则可以通过在bundleDependencies数组中指定包名称并执行npm包,将包捆绑在tarball文件中。
- "bundleDependencies": [
- "renderized",
- "super-streams"
- ],
- // 如果可以使用依赖项,但如果找不到或安装失败,您希望npm继续,
- // 则可以将其放入optionalDependencies对象中。
- // 这是包名称到版本或url的映射,就像dependencies对象一样
- // 不同之处在于,生成失败不会导致安装失败。运行 npm install --omit=optional 将阻止安装这些依赖项。
- /**
- try {
- var foo = require('foo')
- var fooVersion = require('foo/package.json').version
- } catch (er) {
- foo = null
- }
- if ( notGoodFooVersion(fooVersion) ) {
- foo = null
- }
-
- // .. then later in your program ..
-
- if (foo) {
- foo.doFooThings()
- }
- **/
- "optionalDependencies": {
- "fsevents": "^5.0.0"
- },
- // 打包以后在部分浏览器白屏问题
- //> 1% 支持市场份额大于1%的浏览器
- // last 1 version 支持各类浏览器最近的一个版本, 1是可变的
- // last 2 version 支持各类浏览器最近的两个版本
- // not dead 对dead条件取反,dead条件的认定是:
- // 最新的两个版本市场份额已经低于0.5%并且24个月内没有任何官方支持和更新了
- // [文档](https://github.com/browserslist/browserslist#queries)
- "browserslist": [
- "> 1%",
- "last 5 versions",
- "Android >= 4",
- "ios >= 6",
- "not dead",
- "not ie < 11", // 排除ie11 以下版本
- "current node", //当前环境node版本
- "cover 99.5%", //覆盖99.5%主流浏览器
- ],
- "author": "我是作者",
- "contributors":"贡献者是一系列的人",
- "description":"一个描述,方便别人了解你的模块作用,搜索的时候也有用",
- // 指向在线捐赠服务的 url,如 Patreon、Open Collective、GitHub Sponsors、License Zero 或者其他支付网站
- "funding": {
- "type" : "individual",
- "url" : "http://example.com/donate"
- },
- // 用于描述包作为依赖项安装时要包含的条目,文件模式遵循与.gitignore类似的语法
- // 省略该字段将使其默认为["*"],这意味着它将包括所有文件。
- // 您还可以在包的根目录或子目录中提供.npmignore文件,这将阻止文件被包括在内
- // 在包的根目录中,它不会覆盖“files”字段,但在子目录中会覆盖。
- // .npmignore文件的工作原理与.gitignore文件类似
- // 如果存在.gitigner文件,但缺少.npmignole,则将使用.gitignor的内容。
- "files": ["dist/**/*", "lib/**/*"],
- // 一个字符串数组,方便别人搜索到本模块
- // 当我们使用 npm 检索模块时,会对模块中的 description 字段和 keywords 字段进行匹配,
- // 写好 package.json 中的 description 和 keywords 将有利于增加我们模块的曝光率。
- "keywords":[
- "vue3"
- ],
- // 项目主页 url,默认值: /
- // 一般来说,我们打包的静态资源会部署在 CDN 上,为了让我们的应用知道去哪里加载资源
- // 则需要我们设置一个根路径,这时可以通过 package.json 中的 homepage 字段设置应用的根路径
- "homepage" : "https://wwww.9991024.com/",
- // bug 提交地址或者一个邮箱,被你的模块坑到的人可以通过这里吐槽
- "bugs": {
- "url":"shanggu178@163.com"
- },
- // 指定包含项目类型声明文件的文件名
- // 例如,如果项目中类型声明文件存储在项目根目录中,文件名为 index.d.ts ,
- // 则可以在package.json 中设置 "typings": "index.d.ts"
- "typings": "lib/index.d.ts",
- // 用于指定包含副作用的文件或文件夹
- // 与 webpack 相关的字段,声明该模块是否包含 sideEffects(副作用)
- // 从而可以为 tree-shaking 提供更大的优化空间。
- "sideEffects": ["dist/*", "es/**/style/*", "lib/**/style/*", "*.less"],
- // unpkg 是一个内容源自 npm 的全球快速 CDN
- // 配置unpkg 字段后,发布到 npmjs.com 中的包会自动同步到 unpkg.com 上,一般为 umd 格式。
- "unpkg": "dist/antd.min.js",
- // 用来将一个大型项目拆分为半独立子项目的一项可选功能,
- // 每个子项目都列出了自己的一组依赖关系。
- // 工作区字段是全局模式列表,这些模式与应成为应用程序工作区的所有目录匹配。
- // [文档](https://docs.npmjs.com/cli/v9/using-npm/workspaces)
- /**
- // 配置
- "workspaces": [
- "packages/a"
- ]
- // 目录结构
- +-- package.json
- `-- packages
- +-- a
- | `-- package.json
- // init
- npm init -w ./packages/a
- // 安装 abbrev
- npm install abbrev -w ./packages/a
- // 运行
- npm run test -w ./packages/a
- **/
- "workspaces": [
- "./packages/*"
- ],
- // 用于将某些可执行 Javascript 文件公开给父包的字段。 此处列出的所有条目都可以通过$ PATH 获得。
- // 通俗点理解就是我们全局安装, 我们就可以在命令行中执行这个文件,
- // 本地安装我们可以在当前工程目录的命令行中执行该文件
- // "bin": "./path/to/program"
- "bin": {
- "name的值": "./dist/bin.js",
- },
- // 链接器插件用来确定哪个链接器应该安装特定包的枚举。只允许使用某些值
- "languageName": "node",
- "repository": {
- "type": "git",
- "url": "https://gitee.com/xafzz/admin-vue3-element-vite"
- },
- // 仅当从本地来源生成包时才考虑这些设置(通过 yarn pack 或像 yarn npm publish 这样的发布命令之一)
- "publishConfig": {
- // 定义将程序包发布到 npm 注册表时要使用的程序包访问级别
- // 有效值是公开的并且是受限制的,但是受限制的通常需要注册付费计划(这取决于你使用的注册表)
- "access": "public",
- // 如果存在,则在打包打包以将其运送到远程注册表之前,清单中的顶级 bin 字段将被设置为此新值
- // 这不会修改真正的清单,只会修改存储在 tarball 中的清单
- "bin": "./build/bin.js",
- // 与publishConfig.bin属性的原理相同
- // 生成工作空间 tarball 时,将使用此值代替顶级浏览器字段
- "browser": "./build/browser.js",
- // 默认情况下,出于可移植性的原因,
- // 在 bin 字段中列出的文件之外的文件都不会在结果包归档文件中标记为可执行文件
- // executeFiles 字段使你可以声明必须设置了可执行标志(+ x)的其他字段
- // 即使不能通过 bin 字段直接访问它们也是如此
- "executableFiles": ["./dist/shim.js"],
- // 与publishConfig.bin属性相同的原理
- // 生成工作空间 tarball 时,将使用此值代替顶级 main 字段
- "main": "./build/index.js",
- // 与publishConfig.bin属性相同的原理
- // 生成工作空间 tarball 时,将使用此值代替顶级 module 字段
- "module": "./build/index.mjs",
- // 如果存在,当将包推送到远程位置时,将替换配置中定义的任何注册表
- "registry": "https://npm.pkg.github.com"
- },
- // 在安装过程中与process.platform进行比较的值
- // 如果值不匹配,则包将看不到其安装后脚本运行(如果在dependencies中列出)
- // 或根本不会安装(如果在optionalDependencies中列出)
- // 指定模块将在哪些操作系统上运行
- "os": [
- "linux",
- "darwin",
- // or
- "!win32",
- ],
- // 在安装过程中与process.arch进行比较的值
- // 如果值不匹配,则包将看不到其安装后脚本运行(如果在dependencies中列出)
- // 或根本不会安装(如果在optionalDependencies中列出)
- // 如果您的代码只在某些cpu架构上运行,那么您可以指定哪些架构
- "cpu": [
- "x64",
- "ia32",
- "arm64",
- // or 阻止
- "!arm",
- "!mips"
- ],
- // 在安装过程中与主机标准C库进行比较的值
- // 如果值不匹配,则包将看不到其安装后脚本运行(如果在dependencies中列出)
- // 或根本不会安装(如果在optionalDependencies中列出)
- "libc": [
- "glibc",
- "musl",
- ],
- // 该字段允许您指示Yarn使用特定分辨率,而不是解析程序通常会选择的任何分辨率。
- // 这对于强制所有软件包使用单个版本的依赖项或向后移植修订很有用。
- // 解析键的语法接受一种级别的特异性,因此以下所有示例都是正确的。
- "resolutions": {
- "relay-compiler": "3.0.0",
- "webpack/memory-fs": "0.4.1",
- "@babel/core/json5": "2.1.0",
- "@babel/core/@babel/generator": "7.3.4",
- "@babel/core@npm:7.0.0/@babel/generator": "7.3.4",
- },
- // 该字段指示Yarn强制提取其在磁盘上的内容(当您出于某种原因需要运送可执行二进制文件时很有用)
- // 或者强制将其保留在其存档中(当您希望包包含所有源(包括shell脚本),但它们对运行时不有用时很有用。)。
- "preferUnplugged": false,
- // 更改工作区安装方式的各种设置
- "installConfig": {
- // 覆盖当前工作空间最初为 nmHoistingLimits 设置的值
- // 有效值为workspaces, dependencies , none
- "hoistingLimits": "none",
- // 覆盖当前工作区最初为 nmSelfReferences 设置的值
- "selfReferences": true,
- }
- }