首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出nrwl模块“找不到模块”的原因?

如何找出nrwl模块“找不到模块”的原因?
EN

Stack Overflow用户
提问于 2018-08-30 08:38:47
回答 8查看 20K关注 0票数 13

我在我的项目中使用nrwl.io。

我创建了几个库:

代码语言:javascript
复制
ng g lib rest //ok
ng g lib services //ok
ng g lib models //created ok, but "Cannot find module " later on!

所有这些库都已成功创建,但当我试图导入models库时,我看到错误“无法找到模块”:

代码语言:javascript
复制
import { ModelA, ModelB } from '@myproj/models'; //Cannot find module '@myproj/models'

问题是:如何以及在哪里检查我的'@myproj/models'是否已正确注册?

P.S.我可以在nx.jsonangular.jsontsconfig.json中看到“模型”模块。我看不出和其他模块有什么区别。

P.P.S. I使用"@nrwl/nx": "6.1.0""@nrwl/schematics": "6.1.0"

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-11-01 11:29:33

我也有同样的问题。创建一个库并尝试在多个项目中使用它。首先,确保在main tsconfig.json -> paths属性中添加了您的库。

代码语言:javascript
复制
"paths": {
  "@projectName/LibraryName1": ["libs/LibraryName1/src/index.ts"],
  "@projectName/LibraryName2": ["libs/LibraryName2/src/index.ts"],
  ....
}

然后,必须将项目添加到主angular.json文件中。

代码语言:javascript
复制
"projects": {
   "LibraryName1": {
   "root": "libs/LibraryName1",
   "sourceRoot": "libs/LibraryName1/src",
   "projectType": "library",
   "prefix": "projectName",
   "projectType": "library"
   ...
  }
}

然后,很明显地,检查要使用lib的应用程序的tsconfig.json文件。关键是要删除paths属性。因为您已经添加了主tsconfig.json (在我的例子中,我使用nrwl (一种管理多个应用程序的技术))。

现在,您应该能够引用任何库项目,如下所示:

代码语言:javascript
复制
import { class1,class2 } from '@projectName/libraryName1';

不要忘记使用index.ts导出类(假设您有模型库),如下所示:

代码语言:javascript
复制
export * from './lib/class1';
export * from './lib/class2';

或者您是否有任何有组件的UI库。您应该创建一个模块,在其中添加这些组件,然后使用index.ts导出它,模块文件应该位于lib文件夹中。e.g

代码语言:javascript
复制
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NumberOnlyDirective } from './directives/number-only.directive';

@NgModule({
imports: [CommonModule],
declarations: [NumberOnlyDirective],
exports: [NumberOnlyDirective]
})
export class UiModule {}

UI库的index.ts文件

代码语言:javascript
复制
export * from './lib/ui.module';

在项目app.module.ts中添加UI模块的引用

代码语言:javascript
复制
import { UiModule } from '@projectName/LibraryName1';

在进口方面

代码语言:javascript
复制
 imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
NgxPaginationModule,
Ng2OrderModule,
Ng2SearchPipeModule,
AngularEditorModule,
RichTextEditorAllModule,
NgxPrintModule,
DevExpressModule,
UiModule
...
],
票数 13
EN

Stack Overflow用户

发布于 2020-05-31 13:58:53

在我的例子中,这是因为我很笨,没有在VS代码中重新启动我的TypeScript服务器:

代码语言:javascript
复制
CMD / CTRL + SHIFT + P
>TypeScript: Restart TS Server
票数 16
EN

Stack Overflow用户

发布于 2020-02-28 00:25:28

我也遇到过这个问题。

假设项目名为"project1“,库名为"libray1”(因此我们试图引用模块“@ project 1/ library 1”)。引用NRWL生成的库模块可以很好地在非角度(在我的特殊情况下是Ionic/角)上下文中工作,但是会导致monorepo中角应用程序的“无法找到模块”错误。

出现此问题是因为角应用程序在“project1 1/libs/library1 1”位置查找桶文件(index.ts),而NX则将桶文件降到“project1 1/libs/library1 1/src”中。

(有点烦人的)解决方案是在“project1 1/libs/ index.ts 1”位置创建一个附加的index.ts文件,其内容如下:

代码语言:javascript
复制
export * from './src';

这确保了代码在所有上下文中都能工作,并且是一次修复一次的解决方案(对于您生成的每个新库),而不必在回购中添加对每个角度应用程序的package.json文件的解释引用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52092618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档