结构
1 | { |
字段详细
name字段- 必须小于等于 214 个字符,不能以
.或_开头,不能有大写字母,因为名称最终成为 URL 的一部分因此不能包含任何非 URL 安全字符
- 必须小于等于 214 个字符,不能以
version字段version一般的格式是x.x.x, 并且需要遵循该规则。
discription字段description是一个字符串,用于编写描述信息。有助于人们在npm库中搜索的时候发现你的模块。
keywords字段keywords是一个字符串组成的数组,有助于人们在npm库中搜索的时候发现你的模块。
homepage字段homepage项目的主页地址。
bugs字段bugs用于项目问题的反馈 issue 地址或者一个邮箱。
license字段license是当前项目的协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。
author字段author是具体一个共享者
contributors字段contributors表示一群共享者
files字段files属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
main字段main字段指定了加载的入口文件,require导入的时候就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
directories字段directories制定一些方法来描述模块的结构, 用于告诉用户每个目录在什么位置。
repository字段- 指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助
scripts字段scripts指定了运行脚本命令的 npm 命令行缩写,比如 start 指定了运行 npm run start 时,所要执行的命令。
config字段config字段用于添加命令行的环境变量。
dependencies字段dependencies字段指定了项目运行所依赖的模块。
devDependencies字段devDependencies指定项目开发所需要的模块。
peerDependencies字段peerDependencies字段,是用来供插件指定其所需要的主工具的版本。
bundledDependencies字段bundledDependencies指定发布的时候会被一起打包的模块.
engines字段engines字段指明了该模块运行的平台,比如Node或者npm的某个版本或者浏览器。
os字段- 可以指定你的模块只能在哪个操作系统上运行
cpu字段- 限制模块只能在某种架构的
cpu下运行
- 限制模块只能在某种架构的
private字段- 如果这个属性被设置为
true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
- 如果这个属性被设置为
publishConfig字段- 这个配置是会在模块发布时生效,用于设置发布用到的一些值的集合。如果你不想模块被默认标记为最新的,或者默认发布到公共仓库,可以在这里配置 tag 或仓库地址。
browser字段browser指定该模板供浏览器使用的版本。Browserify这样的浏览器打包工具,通过它就知道该打包那个文件。
入口文件详解
mainmain是最为基础且古老的入口字段,由 Node 与 npm 定义。当main字段都不存在时,通常会使用index.js作为入口。- 使用方法:
{"main": "./index.js"}
modulemodule字段提供符合 ESM 规范的模块入口。- 使用方法:
{"module": "./index.esm.js"}
browserbrowser字段提供对浏览器环境更友好的模块入口。使用方法:
{"browser": "./index.browser.js"}browser(字符串)将代替main,module。
exportsexports字段允许通过访问路径、运行环境(node/browser 等)、模块类型(require/import/types/css 等)组合确定最终的入口文件。运行环境与模块类型的支持,Node 及打包工具之间的实现均有差异。
exports是对外提供多个入口,还有另一个字段imports是对内修改依赖(有点像browser)。
优先级
Node 环境
exportsmainNode 不支持其他字段,所以非常简单。打包工具则是基于 Node 的标准进行扩展的。
Webpack 环境
browserexportsbrowser(字符串)modulemain若构建目标不是 Web,则跳过
browser字段。Webpack 会尽可能尝试去获得一个可以用的文件。
Vite
browser(对象)exportsbrowser(字符串),当browser获得的文件不是 ESM 模块时,module优先级会提升到browser之前。modulemain若构建目标不是 Web,则跳过
browser字段。Vite 会按优先级获得路径后,再尝试获得文件,若获得不到则抛出错误。