Babel.js Webpack无法从包的子目录解析模块

k2fxgqgv  于 2022-12-16  发布在  Babel
关注(0)|答案(1)|浏览(188)

我有一个包正在构建到一个名为lib的目录中,其结构如下:

- lib/
-- moduleA/
---- index.js
-- moduleB/
---- index.js
- src/
-- moduleA/
-- moduleB/

并且在package.json中指定:

"main": "./lib"

在另一个项目中,我尝试从上面的包导入一个特定的模块,如下所示:

import moduleA from '@scope/packageA/moduleA';

但Webpack无法解析该模块,表示:
未找到模块:错误:无法解析“@scope/软件包A/模块A”
但是,如果我直接从lib导入,它确实可以工作:

import moduleA from '@scope/packageA/lib/moduleA;

为什么会发生这种情况?我的理解是Webpack尊重包的main条目,并且应该可以从入口点开始的层次结构中的任何地方导入。

yhqotfr8

yhqotfr81#

我可能晚了几年,但如果有人需要一个可能的答案:
您可以使用package.json中的exports字段来定义哪些目录解析为哪些模块,使用问题中的示例,您可能需要这样的内容:

// package.json
{
  ...
  "exports": {
    "./moduleA": "./lib/moduleA/index.js",
    "./moduleB": "./lib/moduleB/index.js",
  },
}

这将帮助Node正确解析程序包导入,并将其从以下位置“转换”:

import moduleA from '@scope/packageA/moduleA';

致:

import moduleA from '@scoppe/packageA/lib/moduleA/index.js';

请注意,这适用于Node v12+,之前的任何版本都将使用main字段作为包的条目。
这方面还有很多内容,因为您可以有条件地指定入口点,并使用它们构建不同的Javascript格式(CommonJS和EMS),请务必查看文档

相关问题