【问题标题】:Issue with alias in TypeScript and Webpack 3TypeScript 和 Webpack 3 中的别名问题
【发布时间】:2018-04-30 09:42:03
【问题描述】:

更新:已解决!感谢@JulesRandolph 指出循环依赖问题。

我目前正在开发的项目中遇到了一个非常愚蠢的情况。该项目是围绕最新版本的 TypeScript、webpack 和 awesome-typescript-loader 构建的。

tsconfig 包含以下别名:

"paths": {
  "~actions" : [
    "app/actions/index.ts"
  ],
  "~components" : [
    "app/components/index.ts"
  ],
  "~helpers" : [
    "app/helpers/index.ts"
  ],
  "~middlewares" : [
    "app/middlewares/index.ts"
  ],
  "~redux" : [
    "app/redux/index.ts"
  ],
  "~styles/*" : [
    "app/styles/*"
  ],
  "~types" : [
    "app/types/index.ts"
  ]

Webpack 别名配置显示如下(请注意,我也尝试不使用 $ 并针对该用法调整 tsconfig(使用/*)):

{
  '~actions$': '/Users/user/Workspace/prj-name/app/actions/index.ts',
  '~components$': '/Users/user/Workspace/prj-name/app/components/index.ts',
  '~helpers$': '/Users/user/Workspace/prj-name/app/helpers/index.ts',
  '~middlewares$': '/Users/user/Workspace/prj-name/app/middlewares/index.ts',
  '~redux$': '/Users/user/Workspace/prj-name/app/redux/index.ts',
  '~styles': '/Users/user/Workspace/prj-name/app/styles',
  '~types$': '/Users/user/Workspace/prj-name/app/types/index.ts'
}

我的问题是,仅针对“app/redux/app.ts”文件,我无法使用以下语法导入:

import {
  imp1,
  imp2
} from '~redux';

导入未定义。但是我可以这样做:

import {
  imp1
} from './[comp-name]';

在其他文件夹中,我可以使用相同的语法(和相同的文件夹名称)调用。此外,我可以从其他文件夹调用 ~redux 的导入。

我几乎尝试了我所知道的一切,但没有任何改变。

如果有人感兴趣,这里是(几乎)整个 Webpack 配置:https://pastebin.com/gBabDjH9

【问题讨论】:

  • 我看不到 ~reducers 的别名或路径...我想这就是原因
  • 对不起,reducers 是“redux”文件夹的名称,然后我重命名它只是为了看看是否会改变任何东西。感谢您指出,现在修复帖子。
  • 好的,我不知道 webpack 别名的符号 $ ;你试过删除那些吗?
  • 是的。 $ 表示“确切路径”。考虑到我的目标是一个文件,完全匹配它是有意义的。
  • @bmatei app/redux/index.ts 中有什么内容?

标签: typescript webpack import module alias


【解决方案1】:

导出在运行时被解析为 undefined 的事实很可能与您的 webpack 配置正交,而是由循环依赖引起的。

要检查此问题,您可以

  1. 确认从./index 导入时会出现同样的错误。如果是这样,很可能是循环依赖错误。
  2. 在您的项目上运行 madge 以识别此循环 dep。像madge <myTranspiledFolder> --circular 这样的东西。确保运行 madge 的文件是模块化的(madge 支持 AMD、CommonJS 和 ES6 模块)并且尚未捆绑。

【讨论】:

  • 再次感谢朱尔斯!
  • 随时为我的回答 +1 ;-)
  • 我正在尝试,但结果如下:“感谢您的反馈!声望低于 15 人的投票将被记录,但不要更改公开显示的帖子得分。”
  • @bmatei 我确实忘记了“15”声望阈值;别担心 :-) 祝你有美好的一天
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2019-01-08
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多