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
标签:npm,文件,module,json,使用,main,browser From: https://www.cnblogs.com/taue997/p/17400234.html