TypeScript+Webpack 解析符号链接文件夹中的依赖项
Posted
技术标签:
【中文标题】TypeScript+Webpack 解析符号链接文件夹中的依赖项【英文标题】:TypeScript+Webpack resolving dependencies in symlink folder 【发布时间】:2017-12-17 18:44:34 【问题描述】:如果 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 也抱怨过这个问题,但如果在 resolve.modules
中提供到 node_modules
的绝对路径,则可以解决此问题。现在看起来是唯一一个不知道在哪里寻找依赖项的 TypeScript。我查看了 TypeScript 配置文档,但找不到任何有用的信息,如果文件位于主文件夹之外,是否有任何方法可以提示 TypeScript 在哪里查找依赖项?我尝试使用rootDirs
,但似乎不适合我的情况。
【问题讨论】:
【参考方案1】:好的,TypeScript 有 2 种(可能更多,但在我的例子中只使用了 2 种)解决非相对依赖关系的策略,它们都依赖于真实的文件路径。如果 npm 会复制本地依赖,那么不会有任何问题,但它会创建符号链接。
我发现了一种可能解决此问题的解决方法,但不是以最优雅的方式。如果将baseUrl
指定为.
,则可以提供paths
,并且可以提供第3方依赖的准确位置。
现在我的.tsconfig
有以下几行:
"baseUrl": ".",
"paths":
"lodash-es": ["node_modules/lodash-es"]
,
这将强制将所有 lodash-es
条目解析为 ./node_modules/lodash-es
,其中 dot 指向主项目根目录。
希望 TypeScript 能够提供自定义模块解析策略的可能性。
【讨论】:
以上是关于TypeScript+Webpack 解析符号链接文件夹中的依赖项的主要内容,如果未能解决你的问题,请参考以下文章
Webpack 和 TypeScript 无法解析 Vue 的声明文件
模块解析失败:Webpack Typescript Loader 中出现意外的令牌
使用 Webpack 2 和 awesome-typescript-loader 的 baseUrl 和路径解析
Webpack 和 TypeScript:无法解析 node.d.ts 中的模块“child_process”