TypeScript + Webpack解析symlink文件夹中的依赖项

时间:2017-07-13 06:26:49

标签: typescript npm webpack

我遇到过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,但似乎不是我的情况。

1 个答案:

答案 0 :(得分:2)

好的,TypeScript有2个(可能更多,但在我的情况下只使用了2个)解决非相对依赖关系的策略,它们都依赖于真实的文件路径。如果npm会复制本地依赖项,那么就不会有任何问题,但它会创建符号链接。

我找到了一个可能解决这个问题的解决方法,但不是最优雅的方式。如果将baseUrl指定为.,则可以提供paths,并且可以提供第三方相关性的确切位置。

现在我的.tsconfig有以下几行:

"baseUrl": ".",
"paths": {
  "lodash-es": ["node_modules/lodash-es"]
},

这会强制将所有lodash-es条目解析为./node_modules/lodash-es,其中点指向主项目根目录。

希望TypeScript提供自定义模块解析策略的可能性。