2017-05-23 27 views
1

我尝试用树摇动AOT编译后角2应用程序,我捕捉下一个消息:Angular2 - 汇总树摇(* .ngfactory - 无法解析)

“集装箱/模块.ngfactory”是由集装箱\ module.aot.js, 进口但无法得到解决 - 把它当作一个外部依赖

没有名字被用于外部模块提供‘在options.globals集装箱/ module.ngfactory’ - 猜 'Containers_module_ngfactory'

我不知道如何解决这个问题。

这是AOT编译后module.aot.js代码:

import { enableProdMode } from '@angular/core'; 
enableProdMode(); 
import { platformBrowser } from '@angular/platform-browser'; 
import { ModuleNgFactory } from 'Containers/module.ngfactory'; 
platformBrowser().bootstrapModuleFactory(ModuleNgFactory); 
//# sourceMappingURL=module.aot.js.map 

汇总-config.js

'use strict'; 

import nodeResolve from 'rollup-plugin-node-resolve' 
import commonjs from 'rollup-plugin-commonjs'; 
import uglify  from 'rollup-plugin-uglify' 

export default { 
    entry: './Containers/module.aot.js', 
    dest: './module.vendor.js', 
    sourceMap: false, 
    format: 'iife', 
    onwarn: function(warning) { 
     // Skip certain warnings 
     if (warning.code === 'THIS_IS_UNDEFINED') { return; } 
     if (warning.code === 'EVAL') { return; } 
     console.warn(warning.message); 
    }, 
    plugins: [ 
     nodeResolve({jsnext: true, module: true}), 
     commonjs({ 
      include: 'node_modules/rxjs/**', 
     }), 
     uglify() 
    ] 
} 

tsconfig-aot.json

{ 
    "compilerOptions": { 
     "target": "es5", 
     "module": "es2015", 
     "moduleResolution": "node", 
     "sourceMap": true, 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "lib": [ "es2015", "dom" ], 
     "noImplicitAny": true, 
     "suppressImplicitAnyIndexErrors": true, 
     "baseUrl": ".", 
     "paths": { 
      "app/*": [ "../src/*" ] 
     }, 
     "typeRoots": [ 
      "../node_modules/@types" 
     ] 
    }, 
    "files": [ 
     "../src/globals.ts", 
     "../src/Containers/module.aot.ts" 
    ], 
    "exclude": [ 
     "node_modules", 
     "typings" 
    ], 
    "angularCompilerOptions": { 
     "genDir": "../", 
     "skipMetadataEmit": false, 
     "skipTemplateCodegen": false 
    } 
} 

一般来说,AOT可以正常工作,但是我无法运行树状结构以将我的代码绑定到一个文件。

请帮我解决这个问题。

UPD

这问题只是与主module.aot.js文件。

任何建议如何解决这个问题?

回答

1

我找到了解决方案。这很简单,但我花了这么多时间:(

在每次我们需要把正确的修补程序的其他服务,模块的角分量等

例如:

如果我们有一个项目的结构是这样的:

|-main.ts 
|-src 
     | - service 
       | - authorize.service.ts 
     | - login 
       | - login.component.ts 
login.component.ts

然后你想进口authorize.service。TS服务文件夹,你需要把一个补丁,这个服务是这样的:

import { donothing } from '../service/authorize.service' 

这是非常奇怪,但与JITAOT的角度应用效果很好,如果我们把对未来路径这项服务:

import { donothing } from 'service/authorize.service' 

而第二种情况它是一些服务,模块等路径,它位于当前目录。

例如:

我们有像以前一个项目,但在根文件夹,我们有helper.service.ts文件。

|-main.ts 
|-helper.service.ts 
... 

如果您尝试包括helper.service.ts在main.ts这样

import { donothing2 } from 'helper.service' 

import { donothing2 } from '/helper.service' 

它会随着工作JITAOT但不起作用w我们试试汇总树木摇晃

解决方案很简单,但对我来说这很奇怪。

我们需要在文件名之前放置.,因为如果没有.它将被视为外部导入。

import { donothing2 } from './helper.service' 

我希望我的回答对某人有帮助。

谢谢。