打字稿无法解析导入中的非相对路径

Posted

技术标签:

【中文标题】打字稿无法解析导入中的非相对路径【英文标题】:typescript can't resolve non-relative path in import 【发布时间】:2016-08-22 09:03:06 【问题描述】:

我有这样的项目结构

|--src
     |--app.component
                    |--index.ts
     |--home.component
                    |--index.ts
|--tsconfig.json
|--webpack.config.js

我正在尝试在 app.component-index.ts 中执行以下操作

import  HomeComponent  from 'components/home.component'

Typescript 找不到这个模块并抛出

error TS2307: Cannot find module 'home.component'

Typescript 文档接下来说:

对 moduleB 的非相对导入,例如 import b from "moduleB", 在源文件 /root/src/folder/A.ts 中,将导致尝试 以下位置用于定位“moduleB”:

/root/src/folder/moduleB.ts
/root/src/moduleB.ts
/root/moduleB.ts
/moduleB.ts 

所以对于我来说,我希望它会像

/src/components/app.component/components/home.component
/src/components/components/home.component
/src/components/home.component

提前致谢。 附言在我的 webpack.config 中,我将 root.resolve 设置为 src 并且所有捆绑包都正确。 Typescript-loader 将错误打印到终端,但所有内容都已捆绑并正常工作

【问题讨论】:

components/home.component 看起来不像是非相对导入。你告诉它获取home.component,但那是一个目录,而不是一个模块。 @Ozrix 嗯.. 但是如果我把它改成简单的 'home.component' 它对我不起作用。这很奇怪,但几天前components/home.component 工作得很好,当时src 文件夹被命名为client 你不只需要在路径前加上'./'吗?例如。从'./components/home.component'导入 HomeComponent ? @MattSearles 这不能解决问题。如果我这样做,那么路径就会变得相对。我可以用亲戚路径做到这一点,但我想知道为什么它不起作用 【参考方案1】:

所以我可以猜测其中的“为什么”部分,但我对 TypeScript 比较陌生。不过我已经让这个工作了,所以我会尽我所能根据该解决方案进行解释。

如果满足以下条件,您基于 TypeScript 文档的期望大部分是正确的:

'components/home.component'

被视为“非相对导入”。我相当确定(基于对我有用的解决方案)TypeScript 将其视为 tsconfig.json 中“compilerOptions.baseUrl”字段的绝对路径。

对我有用的是这样设置:


  "compilerOptions": 
    "baseUrl": ".",

    // Other options
  

这本质上是告诉 TypeScript 尝试找到类似的东西

'components/home.component'

通过在与 tsconfig.json 文件相同的目录中查找名为“components”的目录,然后在其中查找名为“home.component”的文件/目录。

所以如果你的结构看起来像:

|--src
   |--app.component
       |--index.ts
   |--home.component
       |--index.ts
|--tsconfig.json
|--webpack.config.js

您将 baseUrl 设置为“。”你可能需要像这样格式化你的导入

import  HomeComponent  from 'src/home.component'

【讨论】:

感谢您。我可以使用"baseUrl": "src/" 我的

以上是关于打字稿无法解析导入中的非相对路径的主要内容,如果未能解决你的问题,请参考以下文章

使用带有打字稿的 eslint - 无法解析模块的路径

Babel 模块解析器无法按预期工作(节点 + 打字稿)

打字稿路径无法解析

我无法导入已发布的打字稿库,出现以下错误:“找不到模块:无法解析 'tqt' in ...”

打字稿无法解析类型

如何定义相对于某个根的打字稿导入路径(使用webpack)?