2017-05-23 46 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' 

我希望我的回答對某人有幫助。

謝謝。