Приложение SystemJS/Aurelia ломается в PhantomJS

Я пытался провести несколько тестов в Phantom, но Aurelia/SystemJS, похоже, не работает в Phantom.

Я протестировал его с моим собственным приложением и примером с приложением для контактов Aurelia, они немного отличаются. Я перечислю здесь результаты, которые я захватил:

приложение-контакты:

CONSOLE: INFO [aurelia] Aurelia Starting (from line #undefined in "undefined")
CONSOLE: DEBUG [aurelia] Loading plugin github:aurelia/[email protected]. (from line #undefined in "undefined")
TypeError: Attempting to define property on object that is not extensible.

  http://localhost:9001/:48 in defineProperty
  http://localhost:9001/:36
  http://localhost:9001/:29 in fastKey
  http://localhost:9001/:115
  http://localhost:9001/:10 in set
  http://localhost:9001/:51 in set
  http://localhost:9001/:14 in ensureOriginOnExports
  http://localhost:9001/:131
  http://localhost:9001/jspm_packages/es6-module-loader.js:7 in O
  http://localhost:9001/jspm_packages/es6-module-loader.js:7 in K
  http://localhost:9001/jspm_packages/es6-module-loader.js:7
  http://localhost:9001/jspm_packages/es6-module-loader.js:7
  http://localhost:9001/jspm_packages/es6-module-loader.js:7
  http://localhost:9001/jspm_packages/es6-module-loader.js:7

мое приложение:

CONSOLE: Potentially unhandled rejection [2] ReferenceError: Can't find variable: Map
    at http://127.0.0.1:8380/web-admin/:22
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1)
    at http://127.0.0.1:8380/web-admin/jspm_packages/system.js:1
    at o (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at p (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at j (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at k (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7
    at O (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at K (http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7)
    at http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7
    at http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7
    at http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7
    at http://127.0.0.1:8380/web-admin/jspm_packages/es6-module-loader.js:7 (from line #undefined in "undefined")

FWIW, оба они отлично работают в Chrome/FF, и я использую PhantomJS 1.9.8 на OS X 10.10.

Также вот фантомный скрипт, который я использую для тестирования и вывода из консоли:

var webPage = require('webpage');
var page = webPage.create();

page.open('http://localhost:9001/', function() {
  page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
  };
});

чтобы запустить приложение контактов (первый пример), выполните следующее:

git clone [email protected]:aurelia/app-contacts.git
cd app-contacts
npm install && jspm install
gulp watch

Это предполагает, что у вас установлены node, jspm и gulp. Затем вы можете запустить приведенный выше скрипт phantomjs.

Любые идеи?


person Zen    schedule 06.05.2015    source источник
comment
Пожалуйста, зарегистрируйтесь на мероприятия onConsoleMessage, onError, onResourceError, onResourceTimeout (пример). Возможно есть ошибки.   -  person Artjom B.    schedule 06.05.2015
comment
Вы пробовали версию Phantom js ниже 1.9? У меня были проблемы на osx с некоторыми версиями Phantom 1.9.   -  person sam    schedule 07.05.2015


Ответы (1)


Map — довольно новая структура. Используйте npm install harmony-collections --save-dev и добавьте "node_modules/harmony-collections/harmony-collections.min.js", в конфигурацию кармы.

person nils petersohn    schedule 28.07.2015
comment
Подтверждено, что этот подход работает, хотя я выбрал прокладку es6-collections, так как она выглядит более ухоженной. - person Josh Habdas; 10.12.2015
comment
Что вы подразумеваете под «добавить ... js в конфигурацию кармы»? Я мало знаю о Карме. Я использую файл karma.config.js, созданный генератором Yeoman, но нет списка файлов для включения или чего-то подобного. Не могли бы вы дать мне еще несколько деталей, пожалуйста? - person Andreas Linnert; 22.03.2016
comment
в karma.conf добавьте его в «массив файлов» следующим образом: файлы: [ './node_modules/harmony-collections/harmony-collections.min.js' ] - person nils petersohn; 22.03.2016
comment
Спасибо. Теперь я получил это, и это работает. В моем случае значение files генерируется функцией, поэтому оно было для меня более неясным. - person Andreas Linnert; 22.03.2016