首页 > 解决方案 > 另一个文件中的模块“AnotherModule”导入了意外的值“文件中的模块”。请添加@NgModule 注释

问题描述

在过去的整整 4 天里,我一直在为这个问题头疼。我想我已经阅读了关于 SO 和谷歌的几乎所有内容。所以也许,这里有人可以帮助我。我有 2 个 angular 11 库,一个核心和另一个称为组件。组件依赖于核心。核心构建完美,--prod没有错误或警告。

一旦我尝试使用--prod. 然后我收到一条错误消息,说我的所有核心模块(我有 3 个、CoreModule、DirectivesModule、PipesModule)都有错误。

这三个错误都是一样的:

/Users/eestein/Documents/dev/main/projects/x/components/node_modules/@x/core/lib/core.module.d.ts 模块“FormModule in /Users/eestein”导入的意外值“CoreModule” /Documents/dev/main/projects/x/components/src/lib/form/form.module.ts'。请添加 @NgModule 注释。/Users 中的“FormModule”模块导入的意外值“/Users/eestein/Documents/dev/main/projects/x/components/node_modules/@x/core/lib/directives/directives.module.d.ts”中的“DirectivesModule” /eestein/Documents/dev/main/projects/x/components/src/lib/form/form.module.ts'。请添加 @NgModule 注释。无法绑定到“myDir”,因为它不是“ng-template”的已知属性。

  1. 如果“myDir”是 Angular 指令,则将“CommonModule”添加到该组件的“@NgModule.imports”中。
  2. 要允许任何属性,请将“NO_ERRORS_SCHEMA”添加到此组件的“@NgModule.schemas”。("nConfig.isDropdownOpen && !!parentButtonConfig.dropdownComponent"> <ng-template [ERROR ->][myDir]="parentButtonConfig.dropdownComponent" (a") 附加的事件绑定不是由嵌入式模板上的任何指令发出的。确保事件名称拼写正确,并且所有指令都列在“@NgModule.declarations”中。(“[myDir]="parentButtonConfig.dropdownComponent">”)属性绑定 myDir 未被嵌入模板上的任何指令使用。确保属性名称拼写正确并且所有指令都列在“@NgModule.declarations”中。 ("="parentButtonConfig.isDropdownOpen && !!parentButtonConfig.

这是指令模块和一个指令的代码:

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

@Directive({
    selector: '[myDir]',
    exportAs: 'myDir'
})
export class MyDirDirective 

这是我导出所有内容的方式:

+ src
|--- lib
|--+ directives
|  |-- index.ts: export * from './public-api';
|  |-- public-api.ts: 
|  |       export * from './directives.module';
|  |       export * from './my-dir.directive';
|  |-- directives and module
|--- index.ts: export * from './public-api';
|--- public-api.ts: export * from './directives/index';

这就是我将核心库安装到组件中的方式(组件构建过程的一部分):

npm install file:core.tgz --no-save

这只是我到目前为止阅读/尝试过的所有内容的一部分: 在此处输入图像描述

只是为了缩小一点:

  1. 我认为它与桶文件无关,自从我的第一个 angular 2+ lib(2017 年)以来,我总是参考索引文件:path/inner-path/index. 但我重新验证了整个代码。
  2. 我也不认为我在该imports部分中导入提供程序或任何不是模块的东西,我不止一次地重新验证了整个代码,以防万一。
  3. 作为我在这里发布之前尝试的最后一件事,我从我的核心模块(forRoot 方法)中删除了所有内容,它也没有工作(解决方案发布在这里https://codewithstyle.info/creating-angular-npm-packages -with-ng-packagr/ )

使用enableIvy: true删除错误,但它阻止我发布到 NPM。

更新

我迁移到 v11.2.7 并尝试使用新的组合:

"enableIvy": "true",
"compilationMode": "partial"

这应该允许构建工作。奇怪的是,我仍然得到错误:

ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.

如果您需要更多信息,请告诉我。

标签: angular

解决方案


我将此作为答案发布,因此它是可见的,因为它确实“回答”了这个问题。

这与我的导出方式或文件无关。该错误完全具有误导性。该错误甚至没有发生在消息中指出的指令中。另一个指令没有被编译器 ( ng build --prod) 捕获,发生了循环依赖,这对我来说是超现实的。我不得不在几个不同的地方更改几行代码,以将问题缩小到实际问题。

我正在创建一个回购,所以我可以向 Angular 团队提交一个错误。

很遗憾,第一个构建(有错误的那个)是正确构建的,只有当我尝试构建消费者时,我才收到错误。

无论如何,现在继续。


推荐阅读