Простой запуск Angular2 выдает ошибку с es6-promise .Promise

Я пытаюсь запустить Angular 2 Alpha 45 ('https://code.angularjs.org/2.0.0-alpha.45/angular2.dev.js'), но он не работает в "es6Promise._setAsap", говоря, что es6Promise не определен.

var es6Promise = require('es6-promise').Promise;

// es6-promise asap should schedule microtasks via zone.scheduleMicrotask so that any
// user defined hooks are triggered
es6Promise._setAsap(function(fn, arg) {
  global.zone.scheduleMicrotask(function() {
    fn(arg);
  });
});

Текущая страница:

<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="javascripts/system.js"></script>
        <script>
          System.config({
            map: {
                'es6-shim':'javascripts/es6-shim.js',
                'angular2/angular2': 'javascripts/lib/angular2.alpha.45.dev.js'
            }
          });
            System.import('es6-shim').then(function(){
                System.import('javascripts/app.js');
            });

        </script>            
    </head>    
    <body>
        <my-app>Loading...</my-app>
    </body>
</html>

app.js содержит преобразование файла примера, который содержит:

import {Component, bootstrap} from 'angular2/angular2';
@Component({
    selector: 'my-app',
    template: '<h1>My First Angular 2 App b</h1>'
})
class AppComponent { }
bootstrap(AppComponent);

Возникает вопрос: почему require('es-promise') возвращает пустой объект? Я использую простой машинописный экспорт app.js и не что иное, как systemjs, о которых говорит angular.io.

Я думаю, что что-то упускаю, может быть, прокладку ES6 или другую версию angular2 для браузера?


person Micaël Félix    schedule 14.11.2015    source источник


Ответы (1)


С еще одним часом поиска, по-видимому, - и я не знаю, почему это четко не указано в текущей документации Angular - возникла проблема конфигурации SystemJs:

Отсутствовал тот факт, что angular2 использует определенный формат внутри своего скрипта, и вы должны явно установить его.

Окончательный сценарий в HTML-коде выглядит следующим образом:

<script src="javascripts/system-polyfills.js"></script>
<script src="javascripts/system.js"></script>
<script>
    System.config({
        paths:{"*":"../*.js"},
        map: {
            'angular2/angular2': 'javascripts/lib/angular2.dev',
            'crypto':'javascripts/crypto'
        },
        meta: {
            'angular2/angular2':{
                format: 'register'
            }
        }
    });
    System.import('javascripts/app');
</script>    

Дополнительная информация:

  • Я думаю, что информация с angular.io была для более старой версии SystemJs (возможно, 16, потому что она действительно отличается от 19, которую я использовал здесь), я думал, что CommonJS использовался внутри Angular, но SystemJs предупредил меня, что он нашел такие вещи, как «System.register» в коде, поэтому я изменил формат на «register» (формат модуля совместимости).
  • Не забудьте добавить system-polyfill, если хотите, чтобы он работал в старых браузерах.
person Micaël Félix    schedule 22.11.2015