package.json 中的 browser main module
npm 包其实又分为:只允许在客户端使用的,只允许造服务端使用的,浏览器/服务端都可以使用。
如果我们需要开发一个 npm 包同时兼容支持 web端 和 server 端,需要在不同环境下加载npm包不同的入口文件,显然一个 main 字段已经不能够满足我们的需求,这就衍生出来了 module 与 browser 字段。
文件优先级
在说 package.json 之前,先说下文件优先级
由于我们使用的模块规范有 ESM 和 commonJS 两种,为了能在 node 环境下原生执行 ESM 规范的脚本文件,.mjs 文件就应运而生。
当存在 index.mjs 和 index.js 这种同名不同后缀的文件时,import './index' 或者 require('./index') 是会优先加载 index.mjs 文件的。
也就是说,优先级 mjs > js
browser,module 和 main 字段
字段定义
-
main: 定义了npm包的入口文件,browser 环境和 node 环境均可使用 -
module: 定义npm包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用 -
·
browser: 定义npm包在 browser 环境下的入口文件
总结
-
如果
npm包导出的是 ESM 规范的包,使用 module -
如果
npm包只在 web 端使用,并且严禁在 server 端使用,使用 browser。 -
如果
npm包只在 server 端使用,使用 main -
如果
npm包在 web 端和 server 端都允许使用,使用 browser 和 main
实际情况 https://github.com/SunshowerC/blog/issues/8

浙公网安备 33010602011771号