Подтвердить что ты не робот

Где angular2 -полиполняет теперь, что не-бета Angular 2 упакован как @angular?

Теперь, когда Angular2 вышел из бета-версии (2.0.0-RC.0 и RC.1 вышел вчера /3 мая 2016 года), все Angular 2 упакованы для использования с NPM под новым @angular пространство имен. Многие пакеты были перемещены и должны быть установлены индивидуально, как вы можете видеть в Angular2 CHANGELOG.

Но одна вещь, которую CHANGELOG не адресует, заключается в том, как найти пакет angular2-polyfills, который был ранее доступен.

Мой бета-код назвал это в одном из своих файлов TypeScript:

import 'angular2/bundles/angular2-polyfills';

Что мне теперь нужно сделать, чтобы получить ту же функциональность с новым макетом пакета?

Вот файл ventdor.ts, который использовался для импорта полиполков, чтобы он мог быть включен webpack:

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

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

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

Отсутствие полиполнений вызывает ошибки, подобные следующим, когда я создаю свое приложение с помощью 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'.
4b9b3361

Ответ 1

Как сказал Тьерри Темплер в своем ответе, проблема в том, что zone.js и reflect-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

Пакет 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"
  },
}

Как только это будет сделано, вы снова получите рабочее приложение (при условии, что вы позаботились о других проблемах, связанных с переходом от Angular2 бета к коду RC (релиз-кандидат).

Этот код является образцом моего проекта angular2-bootstrap4-oauth2-webpack на Github.

Ответ 2

Нет файла 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>

Ответ 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';