Angular 6/7消耗自定义库会引​​发错误TS2397:找不到模块'*'

时间:2018-10-22 19:35:35

标签: angular typescript

我目前正在尝试将Angular 2.something项目升级到最新版本。我有一个自定义的angular.config文件,因此可以构建2个使用相同组件“库”的应用程序。但是随后,Angular 6的史诗发布随真正的Angular库一起发布!但是现在(再次)我被困在试图将我的项目重构到这个新版本。

我已经将一个组件库(名为“ core”)构建到一个DIST文件夹中。这个库甚至连Typescript都可以。但是,当我尝试构建Web应用程序时,Angular CLI开始抱怨它找不到模块“核心”。

以下代码段是文件夹dist / core中的public_api.d.ts:

export { WdCoreModule } from './lib/wd-core.module';
export { wdApi } from './lib/core/wd.service';
export { ProcessTokenComponent } from './lib/core/process-token.component';
export { GroupByPipe } from './lib/core/group-by.pipe';
export { AvatarComponent } from './lib/avatar/avatar.component';
export { GameElementsModule } from './lib/game-elements/game-elements.module';
export { AchievementsComponent } from './lib/game-elements/achievements/achievements.component';
export { ModalComponentComponent } from './lib/modal-component/modal-component.component';
export { BaseModalService, BaseModalComponent } from './lib/core/basemodal.service';
export { NavMenuComponent } from './lib/nav-menu/nav-menu.component';
.... More exports ahead

我在tsconfig.json中添加了该库的路径

"paths": {
      "core": [
        "dist/core"
      ],
      "core/*": [
        "dist/core/*"
      ],
}

然后是时候从“核心”库中将模块和组件导入名为“ cms”的应用程序了。

import { WdCoreModule } from 'core';

尚无错误! 现在,我准备使用以下项目来构建我的项目:ng serve cms 这将引发以下错误:

projects / cms / src / app / app.module.ts(52,30):错误TS2307:找不到模块“核心”。

我一直在寻找解决这个问题的方法,但是我有点卡住了。 有编码专家可以帮助我吗?

编辑:解决方案的其他信息

我按照以下文章打包并安装了我的构建库

https://blog.angularindepth.com/creating-a-library-in-angular-6-part-2-6e2bc1e14121

以下2条命令对我有用:

//package.json
"npm_pack": "cd dist/core && npm pack",
//then
npm install dist/core/core-0.0.1.tgz --save

3 个答案:

答案 0 :(得分:3)

您应该在您的packages.json中链接您的构建库(.tgz)。 ts.config路径仅用于开发时间。

答案 1 :(得分:0)

我遇到了同样的问题,找到了不需要在开发过程中打包库的解决方案

我解决了该问题,并将路径也添加到应用程序目录中存在的tsconfig.app.json文件中

{
  "compilerOptions": {
    ...
    "paths": {
      "ika-admin-lib": [
        "../dist/name-lib"
      ],
      "ika-admin-lib/*": [
        "../dist/name-lib/*"
      ]
    }
}

(此处是更多上下文,http://codecleane.rs/2019/07/09/fixing-error-ts2397-cannot-find-module-angular-custom-library/

答案 2 :(得分:0)

在开发过程中,tsconfig.json中的路径出现了相同的错误。 我通过将路径放在/projects/myproject/tsconfig.app.json

下的应用程序级别tsconfig中解决了该问题
      "mylib": [
        "../../dist/mylib"
      ],
      "mylib/*": [
        "../../dist/mylib/*"
      ]

我没有任何来源或文档,没有足够的理由。无论我读过什么文章,都建议在父目录中使用路径,并且似乎对它们有用,也许这些路径适用于其他版本。我刚刚看到了应用程序级别tsconfig.app.json,并想到将路径放在那里并尝试一下,它确实有效。我不知道为什么将路径放在父tsconfig.json中不起作用。

这是我的版本输出的摘录-

Angular CLI: 7.2.4

Angular: 7.2.16

@angular-devkit/build-angular      0.12.4
@angular-devkit/build-ng-packagr   0.12.4
@angular-devkit/build-optimizer    0.12.4
@angular-devkit/build-webpack      0.12.4

ng-packagr  4.7.1

typescript  3.2.4

几件事要注意-

  1. 相对路径会改变。在tsconfig.json中,您处于父级,路径看起来像-
    "paths": {
      "mylib": [
        "dist/mylib"
      ],
      "mylib/*": [
        "dist/mylib/*"
      ]
    }
  1. 如果仅在应用程序级别tsconfig.app.json中具有路径,则IDE(Visual Studio代码)会抱怨显示错误,并且intellisense不起作用。 要解决此问题,我也将路径保留在父级tsconfig.json中。

最初,我只是想评论Maurizio Pozzobon的回答,说我做了同样的事情,并且在开发过程中对我有用。但是作为一个新手,它不允许我添加评论。因此,请考虑使用更多信息来编写此答案。