2017-02-09 92 views
0

我想为我的angular 2项目进行AoT编译。AoT编译module.id错误Angular 2?

我已经分居我的申请,js目录下所有我产生.js文件和目录app,我把我的.ts.html.css文件一起。

对于AOT编译我用的是tsconfig.aot.json

{ 
    "compilerOptions": { 
    "target": "es2015", 
    "module": "es2015", 
    "moduleResolution": "node", 
    "declaration": false, 
    "removeComments": true, 
    "noLib": false, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "lib": ["es6", "es2015", "dom"], 
    "sourceMap": true, 
    "pretty": true, 
    "allowUnreachableCode": false, 
    "allowUnusedLabels": false, 
    "noImplicitAny": true, 
    "noImplicitReturns": true, 
    "noImplicitUseStrict": false, 
    "noFallthroughCasesInSwitch": true, 
    "outDir": "js", 
    "typeRoots": [ 
     "./node_modules/@types", 
     "./node_modules" 
    ], 
    "types": [ 
    ] 
    }, 
    "files": [ 
    "app/main.ts" 
    ], 
    "exclude": [ 
    "node_modules", 
    "js", 
    "app" 
    ], 
    "compileOnSave": false 
} 

和脚本:"ngc": "ngc -p tsconfig.aot.json && npm run copy \"app/*\" \"compiled\" "

目前,我有我的COM,ponents这样的:

@Component({ 
    selector: 'fs-mainbar', 
    templateUrl: 'app/mainbar/mainbar.component.html' 
}) 
export class MainbarComponent { 

但是,当我尝试运行脚本它给了我这个错误:

> [email protected] ngc C:\dev_escal\project\escal\ui\src\main\webapp 
> ngc -p tsconfig.aot.json && npm run copy "app/*" "compiled" 

Error: Compilation failed. Resource file not found: C:/dev_escal/project/escal/ui/src/main/webapp/app/mainbar/app/mainbar/mainbar.component.html 
    at ModuleResolutionHostAdapter.readResource (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler-cli\src\compiler_host.js:291:19) 
    at CompilerHost.loadResource (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler-cli\src\compiler_host.js:230:85) 
    at Object.get (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:26374:111) 
    at DirectiveNormalizer._fetch (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:13753:47) 
    at DirectiveNormalizer.normalizeTemplateAsync (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:13799:25) 
    at DirectiveNormalizer.normalizeTemplate (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:13771:48) 
    at CompileMetadataResolver._loadDirectiveMetadata (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:18074:79) 
    at C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd.js:18250:58 
    at Array.forEach (native) 
    at CompileMetadataResolver.loadNgModuleDirectiveAndPipeMetadata (C:\dev_escal\project\escal\ui\src\main\webapp\node_modules\@angular\compiler\bundles\compiler.umd 
.js:18249:45) 
Compilation failed 

这样就OK了,我应该使用module.id,而是因为我已经seprated我的应用程序为jsapp文件夹,我不得不使用它是这样的:

@Component({ 
    moduleId: module.id.replace("/js/", "/app/"), 
    selector: 'escl-mainbar', 
    templateUrl: './mainbar.component.html' 
}) 
export class MainbarComponent { 

该怎么过给了我这个错误:

> [email protected] ngc C:\dev_escal\project\escal\ui\src\main\webapp 
> ngc -p tsconfig.aot.json && npm run copy "app/*" "compiled" 

Error encountered resolving symbol values statically. Calling function 'module', function calls are not supported. Consider replacing the function or lambda with a re 
ference to an exported function, resolving symbol MainbarComponent in C:/dev_escal/project/escal/ui/src/main/webapp/app/mainbar/mainbar.component.ts, resolving symbol 
MainbarComponent in C:/dev_escal/project/escal/ui/src/main/webapp/app/mainbar/mainbar.component.ts 

所以我几乎坚持从这里。我怎样才能解决这个问题?任何帮助,欢迎:)

问题在GitHub上:

https://github.com/angular/angular/issues/14374

回答

1

试试这个:

export function moduleId() { 
    return module.id.replace("/js/", "/app/"); 
} 

@Component({ 
    moduleId: moduleId(), 
    selector: 'escl-mainbar', 
    templateUrl: './mainbar.component.html' 
}) 
export class MainbarComponent { } 

类似的问题:Angular2 AoT Compiler Errors

有关AOT编译的更多信息,以及其优于JIT汇编访问:Ahead-of-time (AOT) vs Just-in-time (JIT)

+0

嗯你给的例子并没有真正的工作,它仍然给我同样的错误:( – user3719857

+0

你仍然看到相同的问题:'遇到静态解析符号值的错误。调用函数'module ...'?并从相同的文件? –

+0

我已将'moduleId'的代码放在一个单独的文件中,例如: 'export function moduleId(moduleId:any){module_Id.replace(“/ js /”,“/ app /”); }' ,并用它喜欢: '的moduleId:的moduleId(module.id),' 我的模块中。这给了我错误: – user3719857