我最近将角度4.3升级到5.0.0,并且我可以在我的机器上进行本地构建。但是,当我部署到远程计算机时,我在尝试构建时遇到此错误。
这是简单的构建脚本
#!/bin/bash
# Deployment script
git pull
yarn install
./node_modules/.bin/ng build --prod --env=prod
yarn start
构建失败并输出
ERROR in Error during template compile of 'ɵe'
Function calls are not supported in decorators but 'ɵmakeDecorator' was called in 'Injectable'
'Injectable' calls 'ɵmakeDecorator'.
我以前从未见过这个错误。我重构了应用程序以使用相对路径进行导入而没有运气。 我现在完全没有想法。
答案 0 :(得分:1)
不确定这是否有帮助,但我是在这里搜索Google的。
Function calls are not supported in decorators but 'ɵmakeDecorator' was called in 'Injectable'
'Injectable' calls 'ɵmakeDecorator'.
看到此线程中提到的路径问题后,我搜索了项目空间外引用的所有内容,并找到了此导入...
src/app/tour/tour.actions.ts:import {SomeEntity} from "../../../../fe/src/app/model";
此导入(我的代码中有一个错误)已修复,可以在其所属的项目中引用该模型。
import {SomeEntity} from '../model';
导入固定后,我就可以成功编译。错误输出没有帮助,该线程有用,所以这是我的几分钱。
答案 1 :(得分:0)
我有同样的问题。我有一个lib作为一个单独的项目,一个应用程序也将项目分开作为我的lib的消费者。
lib项目中的文件
lib.module
commons.js
Config接口config.ts
import { NgModule, ModuleWithProviders } from '';
import { ViclibTestComponent } from './viclib-test.component';
import { Config } from './config';
import { ViclibTestService } from './viclib-test.service';
@NgModule({
imports: [
],
declarations: [ViclibTestComponent],
providers: [ViclibTestService ],
exports: [ViclibTestComponent]
})
export class ViclibTestModule {
static forRoot(config: Config) : ModuleWithProviders {
return {
ngModule: ViclibTestModule,
providers: [{provide: 'config', useValue: config}] ,
};
}
}
使用Config接口的ViclibTestService,viclib-test.service.ts
export interface Config {
key?: string;
}
上述文件只是其中涉及的相关文件。
现在在app项目中的文件,消费者
AppModule文件app.module.ts中有“错误”
import { Injectable, Inject } from '';
import { Config} from './config';
@Injectable({
providedIn: 'root'
})
export class ViclibTestService {
constructor(@Inject('config') private config: Config) {
console.log("The config in service constructor: ", config);
console.log("config.key: ", config.key);
}
}
修复 出于某种原因,我不得不在文件app.module.ts中的AppModule中给出这样的提供者
import { BrowserModule } from '';
import { NgModule } from '';
import { AppComponent } from './app.component';
import { ViclibTestModule } from 'viclib-test';
const config = {key: 'My beutiful key'};
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ViclibTestModule.forRoot(config)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
现在我可以使用ng build --prod,ng serve --prod和ng serve,没有任何问题。
我正在使用angular 6,其中包括现在的ng-packagr模块来生成库。我想这个库没有完全分开,因为我的库的消费者必须以某种方式提供我的库所需的提供者。如果我错了,请纠正我或给我你的想法。
答案 2 :(得分:0)
我通过更改将组件和模块的相对路径导入绝对路径的源代码来解决此问题。
答案 3 :(得分:0)
在我的情况下,使用这样的自定义管道
@Pipe({name: 'filter'})
export class FilterPipe implements PipeTransform
{
transform(mainArr: any[], searchText: string, property: string): any
{
return someFilterArrayByString(mainArr, searchText);
}
}
在模板中
<div *ngFor='let e in entities | filter : searchText'>
{{ e | json}}
</div>
导致build --prod出现此未知问题。 修复-从管道中删除其他参数,或添加空参数
<div *ngFor='let e in entities | filter : searchText : ""'>
{{ e | json}}
</div>
其他情况为ngFor
<div *ngFor='let e in entities' [ngClass]='e.id==currentEntity.id'>
{{ e | json}}
</div>
将'e.id == currentEntity.id'移动到单独的组件方法中-也已修复。
答案 4 :(得分:-3)
尝试在服务器上构建时出现问题:
"build:prod": "ng build –prod"
在静态解析符号值时遇到错误。调用函数'ɵmakeDecorator',不支持函数调用。考虑使用对导出函数的引用替换函数或lambda,解析符号Injectable in@angular/core/core.d.ts,解析@ angular / core / core.d.ts中的符号ɵf,解析@angular中的符号ɵf /core/core.d.ts
要解决此问题,请执行以下操作:
"build:prod": "ng build –prod –aot=false"