在 package.json 中,入口文件的配置项决定了模块在不同环境下的加载方式。以下是常见的入口文件路径设置的配置项:
1. main
-
用途: 这是 Node.js 和大多数工具(如 CommonJS 模块)加载的默认入口点。
-
格式: CommonJS 格式的文件。
-
示例:
json 复制代码 { "main": "dist/index.cjs.js" }
2. module
-
用途: 用于支持 ES 模块的环境(例如 Webpack、Rollup 等)。通常这个字段指向 ES 模块格式的文件。
-
格式: ES 模块 (
.mjs或者.js,使用import和export语法)。 -
示例:
json 复制代码 { "module": "dist/index.esm.js" }
3. exports
-
用途: 这是 Node.js 和现代工具使用的一种新的方式,允许定义多个入口点,并根据环境条件(如 ES 模块或 CommonJS 模块)来选择加载不同的文件。
-
格式: 可以根据条件导出不同文件,例如 ES 模块、CommonJS 或不同的环境。
-
示例:
json 复制代码 { "exports": { ".": { "import": "./dist/index.esm.js", // ES 模块 "require": "./dist/index.cjs.js" // CommonJS 模块 } } }
4. browser
-
用途: 用于浏览器环境的入口点,通常用于替换 Node.js 相关的代码(如
fs,path)以提供适用于浏览器的实现。 -
格式: JavaScript 文件,可以是 CommonJS 或 ES 模块。
-
示例:
json 复制代码 { "browser": "dist/index.browser.js" }
5. types / typings
-
用途: 用于指定 TypeScript 类型定义文件的入口点,通常是
.d.ts文件。这个字段允许 TypeScript 和现代编辑器找到类型定义。 -
示例:
json 复制代码 { "types": "dist/index.d.ts" }
6. bin
-
用途: 指定可执行文件(CLI)入口点,通常用于发布命令行工具。
-
示例:
json 复制代码 { "bin": { "my-cli": "./bin/cli.js" } }
7. unpkg
-
用途: 为
unpkg.com提供的 CDN 指定入口点。unpkg是一个常用的公共 CDN,特别适合前端库。 -
示例:
json 复制代码 { "unpkg": "dist/index.umd.js" }
8. jsdelivr
-
用途: 为
jsDelivrCDN 指定入口点,类似于unpkg。 -
示例:
json 复制代码 { "jsdelivr": "dist/index.umd.js" }
9. sideEffects
-
用途: 用于标记是否在模块中有副作用,通常用于 tree-shaking 优化。
false表示没有副作用,["*.css"]表示某些文件有副作用(比如 CSS 文件)。 -
示例:
json 复制代码 { "sideEffects": false }
10. man
-
用途: 为 Unix 系统上的
man命令指定入口,通常用于命令行工具发布时提供man文档。 -
示例:
json 复制代码 { "man": "./man/doc.1" }
11. typesVersions
-
用途: 用于定义不同版本的 TypeScript 类型文件,根据 TypeScript 版本提供不同的类型定义。
-
示例:
json 复制代码 { "typesVersions": { ">=3.1": { "*": ["types/v3/*"] } } }
总结:
常见的配置项包括 main、module、exports、browser、types,它们用于不同环境和模块系统(CommonJS、ESM、浏览器、Node.js)。此外,工具和 CDN(如 unpkg 和 jsdelivr)也有对应的配置项。