package.json 的入口文件路劲设置的配置项有哪些

245 阅读2分钟

package.json 中,入口文件的配置项决定了模块在不同环境下的加载方式。以下是常见的入口文件路径设置的配置项:

1. main

  • 用途: 这是 Node.js 和大多数工具(如 CommonJS 模块)加载的默认入口点。

  • 格式: CommonJS 格式的文件。

  • 示例:

    json
    复制代码
    {
      "main": "dist/index.cjs.js"
    }
    

2. module

  • 用途: 用于支持 ES 模块的环境(例如 Webpack、Rollup 等)。通常这个字段指向 ES 模块格式的文件。

  • 格式: ES 模块 (.mjs 或者 .js,使用 importexport 语法)。

  • 示例:

    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

  • 用途: 为 jsDelivr CDN 指定入口点,类似于 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/*"]
        }
      }
    }
    

总结:

常见的配置项包括 mainmoduleexportsbrowsertypes,它们用于不同环境和模块系统(CommonJS、ESM、浏览器、Node.js)。此外,工具和 CDN(如 unpkgjsdelivr)也有对应的配置项。