我遇到过TypeScript + Webpack在符号链接文件夹中无法正确解析依赖关系的问题。我有这样的文件结构:
- main
-- index.ts
-- package.json
-- webpack.config.js
- shared-lib
-- services
--- session.ts
-- package.json
在main
中,shared-lib@file:../shared-lib
存在依赖关系,结果npm会在node_modules
中为其创建符号链接。
在shared-lib
我对lodash-es
有依赖关系,而且我在main
中有关联,但项目中应该只有一个lodash-es
我希望保留main
,结果当我尝试构建项目时,我会得到类似的结果:
ERROR in [at-loader] ../shared-lib/index.ts:1:24
TS2307: Cannot find module 'lodash-es/capitalize'.
Webpack也在抱怨这一点,但如果在node_modules
中提供resolve.modules
的绝对路径,则可以修复。现在看起来像唯一的TypeScript不知道在哪里查找依赖项。我查看过TypeScript配置文档并且找不到任何有用的东西,有没有办法提示TypeScript在哪里查找依赖项,如果文件位于主文件夹之外?我尝试使用rootDirs
,但似乎不是我的情况。
答案 0 :(得分:2)
好的,TypeScript有2个(可能更多,但在我的情况下只使用了2个)解决非相对依赖关系的策略,它们都依赖于真实的文件路径。如果npm会复制本地依赖项,那么就不会有任何问题,但它会创建符号链接。
我找到了一个可能解决这个问题的解决方法,但不是最优雅的方式。如果将baseUrl
指定为.
,则可以提供paths
,并且可以提供第三方相关性的确切位置。
现在我的.tsconfig
有以下几行:
"baseUrl": ".",
"paths": {
"lodash-es": ["node_modules/lodash-es"]
},
这会强制将所有lodash-es
条目解析为./node_modules/lodash-es
,其中点指向主项目根目录。
希望TypeScript提供自定义模块解析策略的可能性。