我遇到过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中,结果当我尝试构建项目我得到类似的东西:
[at-loader]中的错误../shared-lib/index.ts:1:24
TS2307:找不到模块’lodash-es / capitalize’.
Webpack也在抱怨这一点,但如果在resolve.modules中提供node_modules的绝对路径,则可以修复.现在看起来像唯一的TypeScript不知道在哪里查找依赖项.我查看过TypeScript配置文档并且找不到任何有用的东西,有没有办法提示TypeScript在哪里查找依赖项,如果文件位于主文件夹之外?我尝试使用rootDirs,但似乎不适合我的情况.
解决方法
好吧,TypeScript有2个(可能更多,但在我的情况下只使用了2个)解决非相对依赖关系的策略,它们都依赖于真实的文件路径.如果npm会复制本地依赖项,那么就不存在任何问题,但它会创建符号链接.
我找到了一个可能解决这个问题的解决方法,但不是最优雅的方式.如果将baseUrl指定为.,则可以提供路径,并且可以提供第三方依赖关系的确切位置.
现在我的.tsconfig有以下几行:
"baseUrl": ".","paths": { "lodash-es": ["node_modules/lodash-es"] },
这将强制将所有lodash-es条目解析为./node_modules/lodash-es,其中dot指向主项目根目录.
希望TypeScript提供自定义模块解析策略的可能性.