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

browsermodule 和 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

posted @ 2023-05-14 21:11  TangTaue  阅读(33)  评论(0编辑  收藏  举报