angular2-polyfills现在在哪里,非beta Angular 2打包为@angular?

Mic*_*ryl 24 typescript angular

现在Angular2已经完成测试版(2.0.0-RC.0和RC.1于昨天/ 2016年5月3日发布),所有Angular 2都打包用于新的@angular命名空间下的NPM.很多软件包已被移动,现在必须单独安装,正如你在Angular2 CHANGELOG中看到的那样.

但是,CHANGELOG没有解决的一件事是如何找到angular2-polyfills以前可用的捆绑包.

我的beta代码在其中一个TypeScript文件中调用了它:

import 'angular2/bundles/angular2-polyfills';
Run Code Online (Sandbox Code Playgroud)

现在我需要做什么才能使用新的包布局获得相同的功能?

这是ventdor.ts用于导入polyfill 的文件,以便webpack可以包含它:

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

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

require('./lib/bootstrap/bootstrap.js');
Run Code Online (Sandbox Code Playgroud)

当我使用webpack构建应用程序时,缺少polyfill导致如下错误:

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'.
Run Code Online (Sandbox Code Playgroud)

Mic*_*ryl 14

正如亨利TEMPLIER他回答说,这个问题是zone.jsreflect-metadata在现在的被带angular2-polyfills.js束不再可用.

要恢复功能,您需要直接导入它们,而不是依赖旧的polyfills代码.

//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
Run Code Online (Sandbox Code Playgroud)

reflect-metadata软件包已经具有TypeScript的内置类型,因此您可以使用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"
  },
}
Run Code Online (Sandbox Code Playgroud)

完成后,您应该再次使用一个有效的应用程序(假设您已经处理了从Angular2 beta迁移到RC(候选版本)代码所涉及的其他问题.

此代码是来自Github上的angular2-bootstrap4-oauth2-webpack项目的示例.


Thi*_*ier 6

没有更多angular2-polyfills.js文件.您需要明确包含ZoneJS和Reflect Metadata库(FYI angular2-polyfill包含这两个库)因此您需要包含以下内容:

<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 至少在webpack世界中,还有更多内容.我不能把它放在index.html中,因为那些文件不可用.Webpack将它们整合到一些文件中,在这种特殊情况下称为vendor.js.文件只能通过导入其中一个顶级文件或导入到导入顶级文件的实习文件中进行包含(略微简化). (2认同)