我一直在运行an open source project,该版本突然开始使构建失败。我已经阅读了关于SO的无数答案(具有类似的错误消息,但没有有效的解决方案)和关于该问题的GitHub线程,并且无法查明问题。
运行ionic build --prod
时,我收到了由AOT引起的错误,提示:
Function expressions are not supported in decorators in 'AutoCompleteModule'
'AutoCompleteModule' references 'ɵ4'
'ɵ4' contains the error at ../index.js.ts(698,41)
Consider changing the function expression into an exported function.
这是有问题的代码(第一行是错误消息中引用的行):
var AutoCompleteModule = /** @class */ (function () {
function AutoCompleteModule() {
}
AutoCompleteModule_1 = AutoCompleteModule;
AutoCompleteModule.forRoot = function () {
return {
ngModule: AutoCompleteModule_1,
providers: []
};
};
var AutoCompleteModule_1;
AutoCompleteModule = AutoCompleteModule_1 = __decorate$1([
NgModule({
declarations: [
AutoCompleteComponent,
BoldPrefix
],
exports: [
AutoCompleteComponent,
BoldPrefix
],
imports: [
CommonModule,
FormsModule,
IonicModule
]
})
], AutoCompleteModule);
return AutoCompleteModule;
}());
export { AutoCompleteComponent, AutoCompleteModule, AutoCompleteOptions, BoldPrefix };
//# sourceMappingURL=index.js.map
我尝试删除箭头功能,尝试删除装饰器(即@class
,@param
),尝试更改汇总,尝试修改tsconfig文件,更改导入,以及还有很多。
这是我所有的进口商品:
import { Input, Output, ViewChild, ElementRef, HostListener, Component, EventEmitter, TemplateRef, Pipe, Injectable, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
import { Platform, IonicModule } from '@ionic/angular';
import { Subject, from, Observable } from 'rxjs';
import { finalize } from 'rxjs/operators';
答案 0 :(得分:0)
'AutoCompleteModule'中的装饰器不支持函数表达式
遗憾的是,此错误消息完全毫无用处。
我唯一看到出现此错误的时间是从node_modules
文件夹的内部进行 import 时。
例如;
import {concat} from 'rxjs/src/internal/observable/concat';
以上示例导入了不打算使用的源代码,并且在该源代码内部发生的是TypeScript功能(例如装饰器)的声明。这些可以被Angular AOT编译器获取,从而引发上述错误。该错误通常被抛到有问题的导入所在的地方。
由于在开发模式下AOT已关闭。错误无声。
因此,请仔细检查所有进口商品。
答案 1 :(得分:0)
我发现在生成的dist文件中,我的index.d.ts需要对此进行更改:
export * from './auto-complete/auto-complete.component';
export * from './auto-complete.service';
export * from './bold-prefix.pipe';
export * from './auto-complete-options.model';
export declare class AutoCompleteModule {
static forRoot(): ModuleWithProviders;
}
对此:
import {NgModule, ModuleWithProviders} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {IonicModule} from '@ionic/angular';
import {AutoCompleteComponent} from './auto-complete/auto-complete.component';
import {BoldPrefix} from './bold-prefix.pipe';
export * from './auto-complete/auto-complete.component';
export * from './auto-complete.service';
export * from './bold-prefix.pipe';
export * from './auto-complete-options.model';
@NgModule({
declarations: [
AutoCompleteComponent,
BoldPrefix
],
exports: [
AutoCompleteComponent,
BoldPrefix
],
imports: [
CommonModule,
FormsModule,
IonicModule
]
})
export declare class AutoCompleteModule {
static forRoot(): ModuleWithProviders;
}
尽管这可行,但似乎更像是一种解决方法。