package.json字段理解

38 阅读2分钟

package.json

参考了npm官网package.json概述及一些文章,还有一些自己的理解或者偏见,各位看官见仁见智,辩证着看

{
  "name": "sr-util-validator", // 发布包名,在发布的npm服务中需要唯一
  "version": "0.0.1", // 版本号,遵循semver规范
  "description": "sr-util-validator", // 项目描述
  "keywords": "", // 关键字,相当于标签,利于搜索
  "homepage": "", // 项目主页
  "license": "", // 协议
  "author": "", // 作者
  "files": [], // 发布的文件列表, 默认情况时package.json/readme.md/LICENCE/CHANGES/NOTICE/main指定文件
  "main": "index.js", // 包入口文件,如未指定,则默认为根目录的index.js, 引入方式require,遵循COMMONJS规范,最古老最常用的入口文件
  "module": "", // 包入口文件,优先级高于main, 主要是为了遵循ESM规范(支持tree shaking),npm官方规范还没有引入这个字段,但是主流构建工具webpack,rollup,vite等都支持这个字段,
  "browser": "", // 对浏览器环境提供更友好的模块入口,没怎么用过
  "exports": { // 允许通过访问路径、运行环境(node/browser),模块类型(require/import/types/css等)组合确定最终的入口文件
    "require": "lib/index.js", // 使用require方式引入时,默认访问路径为lib/index.js
    "import": "es/index.js", // 使用import方式时,默认访问路径为es/index.js
  }, 
  "bin": "index.js", // 一般项目用不到,开发脚手架时使用,安装一个包之后,会将bin指定文件加入到nodejs的一个可执行的目录中,在终端直接可以调用
  "dependencies": {}, // 项目依赖
  "peerDependencies": {}, // 项目宿主环境必要的依赖,比如开发一个vue3组件库,不需要把vue打包到组件库里,可以把vue作为peerDependencies, 告诉使用组件库的宿主环境,要使用组件库先安装vue3
  "optionalDependencies": {}, // 可选依赖,如果安装这个依赖失败的时候,不终止程序继续安装构建
  "devDependencies": {}, // 开发依赖,比如vite,scss,webpack这种只在开发环境使用,生产环境不需要的依赖
  "scripts": {}, // 命令行配置
  "engines": "", // 项目环境的要求,比如npm,node版本
  "private": false, // 项目是否为私有, 如果设置为true,执行npm publish到npm时会拒绝发布
  "publishConfig": { // 发布配置
    "registry": "URL_ADDRESS"
  }
}

参考

npm官网package.json概述
为何有 module
package.json 导入模块入口文件优先级详解 main, browser, module, exports