【问题标题】:Getting 'Module not found' although file exists尽管文件存在,但获取“未找到模块”
【发布时间】:2017-10-23 00:42:55
【问题描述】:

我下载了the angular starter 并运行了该应用程序,它运行良好。现在我在“src/app/services/people.service.ts”中添加了一个新文件“people.service.ts”。

当我尝试导入它时,我得到一个错误:

找不到模块:错误:无法解析“services/people.service” '/path-to-project/angular-starter-master/src/app'

这是我用来导入它的代码(在 src/app/app.module.ts 中):

import {PeopleService} from 'services/people.service';

我确信没有拼写错误,因为 IDE 可以识别它。整个项目中没有任何 TypeScript 错误。文件“services/people.service”确实包含一个名为 PeopleService 的类。

我们将不胜感激任何帮助。如果您需要任何其他信息,请告诉我。

【问题讨论】:

  • 尝试相对路径from './services/people.service';
  • @Maximus 太棒了!有用!感谢您快速而出色的回答。请改写为答案,我会接受的。
  • 不客气,作为答案发布

标签: javascript node.js angular typescript webpack


【解决方案1】:

问题是您使用的是绝对路径而不是相对路径。将导入更改为以下内容:

import {PeopleService} from './services/people.service';

【讨论】:

  • @MedetTleukabiluly :D
【解决方案2】:

TypeScript 2.0+

在 TypeScript 2.0 中,您可以在 tsconfig.json 中添加 baseUrl 属性:

{
    "compilerOptions": {
        "baseUrl": "."
        // etc...
    },
    // etc...
}

然后您可以像在基本目录中一样导入所有内容:

import {PeopleService} from 'services/people.service';

在此之上,您可以添加一个路径属性,它允许您匹配一个模式,然后将其映射出来。例如:

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "services/*": [
                "services/validation/*"
            ]
        }
        // etc...
    },
    // etc...
}

这将允许您从任何地方导入它:

import {PeopleService} from 'services/people.service';

从那里,您将需要配置您正在使用的任何模块加载器以支持这些导入名称。现在 TypeScript 编译器似乎并没有自动映射出来。

您可以在 github 问题中阅读更多相关信息。还有一个 rootDirs 属性,在使用多个项目时很有用。

您可以像这样直接将绝对路径更改为相对路径:

import {PeopleService} from './services/people.service';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多