package.json中exports "./package.json": "./package.json"的目的是什么?

问题描述 投票:0回答:1

我看到一些npm模块的package.json有这样的

exports

{
  "name": "my-package",
  "exports": {
    ".": "./lib/index.js",
    "./package.json": "./package.json"
  }
} 

"./package.json": "./package.json"
出口中的目的是什么?我在 npm 文档中搜索了 package.json 但没有提到
exports

node.js npm package.json
1个回答
0
投票

虽然 npm 文档没有提供

exports
关键字的解释,但我发现 Nodejs 文档对此进行了解释。

来自 nodejs 14.x

“exports”字段提供了“main”的替代选项,其中 可以定义包主入口点,同时也封装 包,防止除了定义的入口点之外的任何其他入口点 “出口”。这种封装允许模块作者定义一个公共的 他们的包的接口。

警告:引入“出口”字段会阻止消费者 包避免使用任何未定义的入口点,包括 package.json(例如 require('your-package/package.json')。这将 可能是一个重大改变。

我发现这是一个不断发展的功能。在 nodejs 12.x 中添加了

要设置包的主入口点,建议定义 包的 package.json 文件中的“exports”和“main”:

{
  "main": "./main.js",
  "exports": "./main.js"
}

当定义“exports”字段时,包的所有子路径都是 封装后不再提供给进口商。例如, require('pkg/subpath.js') 抛出 ERR_PACKAGE_PATH_NOT_EXPORTED 错误。

这不是一个强封装,因为直接 require 包的任何绝对子路径,例如 require('/path/to/node_modules/pkg/subpath.js') 仍然会加载 subpath.js。

nodejs 14.x 添加了子路径导出

{
  "main": "./main.js",
  "exports": {
    ".": "./main.js",
    "./submodule": "./src/submodule.js"
  }
}

现在只有“exports”中定义的子路径可以被导入 消费者,而其他子路径会出错。

© www.soinside.com 2019 - 2024. All rights reserved.