【问题标题】:TypeScript+Webpack resolving dependencies in symlink folderTypeScript+Webpack 解析符号链接文件夹中的依赖项
【发布时间】: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,但似乎不适合我的情况。

【问题讨论】:

    标签: typescript npm webpack


    【解决方案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 能够提供自定义模块解析策略的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2019-07-07
      • 2013-05-10
      • 2012-12-14
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多