如何使用“exports”键正确公开 package.json 中的子路径?

How to properly expose subpaths in package.json using the ”exports” key?

我发布了一个 NPM 包,它是框架的插件,在框架及其环境中使用时只需要 package.json 的主要条目。我还希望能够使用插件的子路径,以便用户也能够在该框架之外使用该插件,这将要求永远不会初始化主入口点,因为那里使用了特定于框架的依赖项在框架外使用这个插件时我不想初始化它。

我的项目结构如下所示:

.
├── index.js
├── submodule.js
└── package.json

此示例的源代码如下所示:

// index.js
export default function () {
  return "foo";
}
// submodule.js
export default function () {
  return "bar";
}
// package.json
{
  "name": "my-package",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "exports": {
    ".": "./index.js",
    "./submodule": "./submodule.js"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "MIT"
}

根据 Node.js documentation 在这个问题上,这个设置应该允许我像这样使用我的包:

import myPackage from ’my-package’
import mySubModule from ’my-package/submodule’

为了能够在本地测试我的包,我在 npm 包的项目根目录中 运行 npm link 然后在另一个项目中 运行 npm link my-package .现在我尝试 运行 导入 my-packagemy-package/submodule 的项目(使用 parcel-bundler),就像上面的例子一样,我得到以下异常:

Cannot resolve dependency 'my-package/submodule'

我将 NVM 与 Node v.12.18.4 和 NPM v.7.15.0 一起使用。我也尝试过使用 Node v.14.17.0,但问题仍然存在。我错过了什么?

看来项目设置是正确的,问题出在不支持 package.json#exports 的 parcel-bundler 上。目前有关于此事的公开 issue