package.json 字段说明
参考:https://www.cnblogs.com/tzyy/p/5193811.html(比较详细)或 https://juejin.cn/post/7099041402771734559(有分类)或 https://mp.weixin.qq.com/s/RrHPyjQjGXqRWxz6LvslMw
{ // 名称 "name": "vue", // 版本 "version": "2.6.10", // 描述 "description": "Reactive, component-oriented view layer for modern web interfaces.", // npm包项目的主要入口文件,必须的 "main": "dist/vue.runtime.common.js", // rollup 打包需要的入口文件 "module": "dist/vue.runtime.esm.js", // npm 上所有的文件都开启 cdn 服务地址 "unpkg": "dist/vue.js", // jsdelivr cdn公共库 "jsdelivr": "dist/vue.js", // TypeScript 的入口文件 "typings": "types/index.d.ts", // 当你发布package时,具体那些文件会发布上去 "files": [ "src", "dist/*.js", "types/*.d.ts" ], // 声明该模块是否包含 sideEffects(副作用),从而可以为 tree-shaking 提供更大的优化空间。 "sideEffects": false, "scripts": { "dev": "rollup -w -c scripts/config.js --environment }, // 代码质量检查 "gitHooks": { "pre-commit": "lint-staged", "commit-msg": "node scripts/verify-commit-msg.js" }, // 代码检查 "lint-staged": { "*.js": [ "eslint --fix", "git add" ] }, // git仓库所在位置 "repository": { "type": "git", "url": "git+https://github.com/vuejs/vue.git" }, // 关键词 "keywords": [ "vue" ], // 作者 "author": "Evan You", // 开源协议 "license": "MIT", // bug地址 "bugs": { "url": "https://github.com/vuejs/vue/issues" }, // 主页 "homepage": "https://github.com/vuejs/vue#readme", // 依赖 "devDependencies": { "@babel/core": "^7.0.0", "acorn": "^5.2.1", "babel-eslint": "^10.0.1", }, // 设置一些用于npm包的脚本命令会用到的配置参数 "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } } }
说明:
- 作为包的 package.json 文件 和 作为顶层项目目录下的 package.json 是有点区别。项目目录下 的 package 文件 ,字段不是 很严格的要求。
- 包 版本的 的问题:package.json中包的版本不一定是指定版本,可能是版本的也范围。https://blog.csdn.net/qq_29180565/article/details/106674104
npm 包 设定的版本规则:主版本号.次版本号.修补版本号
-
- version :指定版本。比如
1.2.2
,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。 - ~version:大概匹配某个版本。比如
~1.2.2
,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。 - ^version:兼容某个版本。比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。
- latest :安装最新版本。
- >version:必须大于某个版本。
- >=version:可大于或等于某个版本。
- X :x号的位置表示任意版本。如:1.2.x,表示可以1.2.0,1.2.1,…,1.2.n
- version :指定版本。比如
一、必须属性
- name
- version
二、描述信息
- description
- keywords
- author:author顾名思义就是作者,表示该项目包的作者。
- contributors:contributors表示该项目包的贡献者,和author不同的是,该字段是一个数组,包含所有的贡献者
- homepage:homepage就是项目的主页地址了,它是一个字符串。
- repository:表示代码的存放仓库地址。
三、依赖配置
- dependencies
- devDependencies
- peerDependencies
四、脚本配置
- scripts
- config:用来配置scripts运行时的配置参数,如下所示:
"config": { "port": 3000 }
如果运行npm run start,则port字段会映射到
npm_package_config_port
环境变量中:console.log(process.env.npm_package_config_port) // 3000
五、文件&目录
- main:用来指定加载的入口文件,在 browser 和 Node 环境中都可以使用。如果我们将项目发布为npm包,那么当使用 require 导入npm包时,返回的就是main字段所列出的文件的module.exports 属性。如果不指定该字段,默认是项目根目录下的index.js。如果没找到,就会报错。【如果不是作为npn库的包,这个字段不需要写】
- browser:定义 npm 包在 browser 环境下的入口文件。
- module:定义 npm 包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用。如果 npm 包导出的是 ESM 规范的包,使用 module 来定义入口文件。
- { 说明下 }:main、browser、module 三个的入口入口文件相关的配置是有差别的,特别是在不同的使用场景下。在Web环境中,如果使用loader加载ESM(ES module),那么这三个配置的加载顺序是browser→module→main,如果使用require加载CommonJS模块,则加载的顺序为main→module→browser。
- bin:用来指定各个内部命令对应的可执行文件的位置
- files
- man
六、发布配置
- private
- publishConfig
- license
七、第三方配置
- typings:指定TypeScript的入口文件
TypeScript 的入口文件。【npm 包中 package.json 可能会有,项目下的 根据开发者自己定】
个人理解:typings 字段 就是方便 IDE 识别、编译、智能提示 js 语法的 工具。项目中 引入包,根据 main字段 引入文件的。
typings 的入口文件 里面的代码 只是 为 编辑器 智能提示 服务的【同时,开发人员 通过这个 文件,可以找到 某个方法具体有哪些 参数 以及 参数类型】。
真正执行的程序是不会执行 这里面的 代码的;所以 编辑器 跳转 是先根据 typings 字段进行跳转的,如果 没有这个字段 再跳转 main 字段的文件。
经验:webstorm中npm包的 类型声明 中 interface 定义的类型 类型变量,跳转时 可以跳转 到 ts 的源 文件的定义处。
- eslintIgnore:eslint 使用这个字段