2016-05-04 20 views
23

現在Angular2不在測試階段(2.0.0-RC.0和RC.1於2016年5月3日發佈),所有Angular 2都打包在新的@angular命名空間下與NPM一起使用。很多軟件包已被移動,現在必須單獨安裝,如您在Angular2 CHANGELOG中所見。angular2-polyfills現在已將非Beta版Angular 2打包爲@angular?

但是,CHANGELOG沒有解決的一件事是如何找到以前可用的angular2-polyfills包。

在其打字稿文件中的一個叫本我的測試代碼:

import 'angular2/bundles/angular2-polyfills'; 

什麼我現在需要做的就是用新包裝的佈局,相同的功能?

這裏是ventdor.ts文件用於導入polyfills,以便它可以通過的WebPack包括:

require('./css/bootstrap.css'); 
require('./css/main.css'); 

import 'angular2/bundles/angular2-polyfills'; // THIS NO LONGER WORKS 

require('./lib/bootstrap/bootstrap.js'); 

缺乏polyfills會導致像當我建立我的應用程序使用的WebPack以下錯誤:

ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/async.d.ts 
(28,45): error TS2304: Cannot find name 'Promise'. 

ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/lang.d.ts 
(4,17): error TS2304: Cannot find name 'Map'. 

ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/lang.d.ts 
(5,17): error TS2304: Cannot find name 'Set'. 

回答

14

正如亨利TEMPLIER他回答說,這個問題是zone.jsreflect-metadata現在必須被帶入angular2-polyfills.js包不再可用。

要取回功能,您需要直接導入它們,而不是依賴舊的填充代碼。

//import 'angular2/bundles/angular2-polyfills'; // no longer available 
import 'reflect-metadata'; 
require('zone.js/dist/zone'); 
require('zone.js/dist/long-stack-trace-zone'); // for development only - not needed for prod deployment 

reflect-metadata包已經內置了分型爲打字稿,所以你可以使用import。然而,Zone.js並不是,所以你需要依靠require()來讓webpack把它拿起來並將它包含在你的包中。

當然,你還需要有反映,並帶你package.json依賴部分(我是在年底上市,下同):

{ 
    "name": "angular2-bootstrap4-oauth2-ohmy", 
    "version": "1.0.8", 
    "description": "A skeleton Angular2, Bootstrap 4, OAuth2 application using webpack (oh my!)", 
    "repository": "https://github.com/michaeloryl/angular2-bootstrap4-oauth2-webpack.git", 
    "dependencies": { 
    "@angular/common": "^2.0.0-rc.1", 
    "@angular/compiler": "^2.0.0-rc.1", 
    "@angular/core": "^2.0.0-rc.1", 
    "@angular/http": "^2.0.0-rc.1", 
    "@angular/platform-browser": "^2.0.0-rc.1", 
    "@angular/platform-browser-dynamic": "^2.0.0-rc.1", 
    "@angular/router": "^2.0.0-rc.1", 
    "@angular/router-deprecated": "^2.0.0-rc.1", 
    "bootstrap": "4.0.0-alpha.2", 
    "es6-promise": "^3.0.2", 
    "es6-shim": "^0.35.0", 
    "jquery": "^2.1.4", 
    "js-cookie": "^2.1.0", 
    "lodash": "^4.11.2", 
    "phantomjs-prebuilt": "^2.1.7", 
    "require": "^2.4.20", 
    "rxjs": "^5.0.0-beta.6", 
    "traceur": "0.0.93", 
    "reflect-metadata": "^0.1.2", 
    "zone.js": "^0.6.12" 
    }, 
} 

一旦做到這一點,你應該再有一個工作的應用程序(假設你把參與從Angular2測試移動到RC(發佈候選)代碼等問題護理。

此代碼是從我angular2-bootstrap4-oauth2-webpack Github上項目的樣本。

5

沒有更多angular2-polyfills.js文件。你需要明確包括ZoneJS與反思元庫(FYI angular2-填充工具包含這兩個庫),所以你需要包括以下內容:

<script src="node_modules/zone.js/dist/zone.js"></script> 
<script src="node_modules/reflect-metadata/Reflect.js"></script> 
+2

至少在webpack世界,除此之外還有更多。我不能把它放在index.html中,因爲那些文件在那裏不可用。 Webpack將它們放在幾個文件中,在這個特殊的情況下叫做vendor.js。文件只能被導入到頂層文件之一,或者被導入到被導入到頂層文件的文件中(對其進行了簡單的簡化)。 –

+0

是的,你對webpack是正確的。我認爲你需要導入zonejs並反映元數據依賴關係而不是angular2-polyfill。對不起,我真的不知道如何配置webpack ... –

3

最近,我有這個問題與rc.5和解決它通過像這樣導入區域:

// import 'angular2/bundles/angular2-polyfills'; // old 
import 'reflect-metadata'; 
import 'zone.js/dist/zone'; 
import 'zone.js/dist/long-stack-trace-zone';