Package.json 的imports 和 exports

也就是说imports只对当前包内的文件生效,而exports 可以根据 其他人如何导入我的包内的文件生效

对,准确说是这样

importsexports 的作用域不一样,而且语义也不一样。

imports

它是"当前包内部"的解析规则。

也就是在这个包里,代码写:

js 复制代码
import x from '#/foo'

时,Node/Vite 会在"当前 package"的上下文里查 package.json#imports,并把它映射成真正的文件路径。

它不关心"别人怎么从外部 import 你的包";它关心的是:

  • 这个包内部的源代码
  • 当前模块如何解析 # 开头的 specifier

所以它只对当前包内的模块生效。


exports

它是"对外发布接口"的规则。

比如你在包里配置:

json 复制代码
{
  "name": "my-lib",
  "exports": {
    ".": {
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs"
    },
    "./foo": {
      "import": "./dist/foo.mjs",
      "require": "./dist/foo.cjs"
    }
  }
}

这种配置决定的是:

  • 外部代码怎么从你的包里 import
  • 允许哪些入口暴露出来
  • 根据 import / require / node / browser 等条件返回不同文件

也就是说,exports 控制的是:

  • 别人如何导入我这个包
  • 这个包对外暴露哪些文件
  • 入口如何按环境区分 ESM / CJS

一句话区分

  • imports:当前包自己内部用
  • exports:别人外部使用这个包时用

举个例子

你的包内

json 复制代码
{
  "imports": {
    "#/*": "./src/*"
  }
}

在这个包内部写:

ts 复制代码
import a from '#/utils/a'

能用。

但外部项目:

js 复制代码
import myLib from 'your-package'

不会去读这个 imports


你的包对外

json 复制代码
{
  "exports": {
    ".": {
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs"
    }
  }
}

外部项目再用:

js 复制代码
import myLib from 'your-package'

或者

js 复制代码
const myLib = require('your-package')

就会按条件走不同入口。


所以你的理解是对的

imports 只对当前包内的文件生效;

exports 影响的是其他人如何导入这个包里的内容。

这两个字段是不同层面的规则,别混在一起。

如果你愿意,我可以再补一个"imports / exports / resolve.alias / tsconfig.paths"的四者对照图,最容易记住。

相关推荐
钝挫力PROGRAMER8 小时前
npx 与 npm 全局安装/更新/卸载
npm·npx·mcp·dsh
天若有情6732 天前
开源轻量双语工具|一键批量查询 NPM 包历史下载量,支持按作者批量统计
javascript·npm·github pages·开源工具·netlify·前端开源·npm克隆量
柚稚姐姐7 天前
npm install pnpm -g npm error code EACCES npm error syscall symlink
前端·npm·node.js
晴天168 天前
npm install -f(--force)深度解析:作用原理、报错根源与风险避坑指南
前端·npm·node.js
晴天168 天前
.npmrc 配置文件全解析:从换源到工程化的完整指南
npm·npmrc
晴天169 天前
peerDependencies 全面解析:前端依赖生态的核心机制与实战指南
前端·npm
晴天1611 天前
打造自己的 npm 包实战指南
前端·npm·node.js
西西小飞龙12 天前
npm vs pnpm
前端·npm·node.js
李游Leo15 天前
Node.js 开发环境安装与 npm/pnpm 国内镜像配置(Windows / macOS / Linux)
npm·node.js·pnpm·前端开发·开发环境
晴天1620 天前
Node.js 中 `npm install` 命令分析-Day30
前端·npm·node.js