我有一个依赖于项目 B 的项目 A。项目 B 是用 typescript (tsc) 编写的,而 A 仍在 JS 中(使用 Babel)。
项目 B 有更多的公共代码,可以在将来在项目 C 中重复使用。因此它主要有公共代码。项目 B 有以下带有一些伪代码的文件。
# src/components/comp1.tsx
const Comp1 = () => (<div>Hello world</div>);
export default Comp1;
# src/components/comp2.tsx
import Comp1 from 'components/comp1';
const Comp2 = () => (<div><Comp1 /></div>);
export default Comp2;
# src/index.ts
export {default as Comp1} from 'components/comp1';
export {default as Comp2} from 'components/comp2';
我的 tsconfig 的 baseUrl 为 ./src
,路径为 {}
。当我在这里的故事书中运行这些组件时,它们会按预期工作。现在我使用 tsc
并在 dist
文件夹中将它们编译为 commonjs
模块 & 目标为 es2015
。
现在在项目 A 中。我将使用这个项目 B。所以我确实安装了项目 B 作为依赖项。每当我使用 webpack 编译项目 A 时,它都会引发错误。假设我在项目 A 中的文件如下所示:
# src/pages/index.js
import {Comp2} from 'project-B';
const Home = () => (<div><Comp2 /></div>);
export default Home;
现在它抛出如下错误:-
error - ../project-B/dist/components/comp2.js:9:0
Module not found: Can't resolve 'components/comp1'
7 | const classnames_1 = __importDefault(require("classnames"));
8 | const free_solid_svg_icons_1 = require("@fortawesome/free-solid-svg-icons");
> 9 | const link_1 = __importDefault(require("components/comp1"));
如果我直接使用 comp1
,它就可以正常工作。 comp2
无法定位 comp1
。我认为这与模块分辨率有关。我不知道打字稿应该在同一个依赖项目中查找时在哪里查找 comp1
。我什至无法在网上找到这样的场景寻求帮助。我希望我现在也不必为依赖项定义模块分辨率。任何帮助表示赞赏。谢谢。