У меня есть приложение angular 2, работающее внутри firefox и chrome, не так много внутри (вздох) IE. Основываясь на моей трассировке стека, похоже, что возникла проблема с настройкой System js.
Вот описание ошибки, которое я вижу в своей веб-консоли.
Error: (SystemJS) Syntax error
SyntaxError: Syntax error
at ZoneDelegate.prototype.invoke (http://localhost:8050/node_modules/zone.js/dist/zone.js:230:13)
at Zone.prototype.run (http://localhost:8050/node_modules/zone.js/dist/zone.js:114:17)
at Anonymous function (http://localhost:8050/node_modules/zone.js/dist/zone.js:502:17)
Evaluating http://localhost:8050/app/app.module.js
Error loading http://localhost:8050/app/app.module.js as "./app.module" from http://localhost:8050/app/main.js
Похоже, он не может найти мой
app/app.module.js
Но, как я уже сказал, у меня не было этой проблемы с Firefox и Chrome.
Я немного поискал в Интернете и нашел кое-что о прокладках полифилла... поэтому я попытался включить следующее в свой index.html.
<script src="/node_modules/core-js/client/shim.min.js"></script>
<script src="/node_modules/systemjs/dist/system-polyfills.src.js"></script>
Я надеялся, что это позволит быстро исправить ситуацию, но, похоже, это не так. Есть ли у кого-нибудь какие-либо рекомендации о том, как действовать с этого момента?
Редактировать :
Я обнаружил ошибку 404, которую получаю в веб-консоли IE 11.
Похоже, запрос пытается попасть
URL Protocol Method Result Type Received Taken Initiator Wait Start Request Response Cache read Gap
/node_modules/systemjs/dist/Promise.js.map HTTP GET 404 text/html 210 B 16 ms XMLHttpRequest 140 0 16 0 0 5266
или Promise.js.map в папке systemjs, и у меня его там нет.
Итак, несколько новых вопросов
1) Почему этот запрос не выполняется/не требуется в других браузерах, которые я пробовал?
2) Что делает этот файл, где его взять? Я до сих пор не уверен, что мои синтаксические ошибки исчезнут после того, как я это увижу, но это кажется разумным местом для начала.
Я также заметил, что после удаления/комментирования
<script src="/node_modules/systemjs/dist/system-polyfills.src.js"></script>
Запрос к Promise.js.map больше не выполняется. Поэтому я не уверен, что именно делает полифил, но, похоже, он вводит этот запрос, который приводит к ошибке 404.
Редактировать 2:
Я попытался переключить свою цель ES6, найденную в моем tsconfig.json, на цель ES5, как подробно описано здесь. Теперь, когда я пытаюсь выполнить сборку, я получаю множество других проблем, трассировку стека можно хорошо описать с помощью этот пост.
При переключении на цель ES5 у меня нет доступа к Map, Promise и т. д.
Я попытался посмотреть на некоторые исправления для этого вопроса, например, добавив это
///<reference path="node_modules/angular2/typings/browser.d.ts"/>
в начало моего файла main.ts, но у меня нет папки angular2, вместо этого у меня есть папка @angular. А директорию типизации нигде не найти. Я создаю/разворачиваю эту штуку с помощью gradle, поэтому я не смогу установить npm на свой локальный компьютер и положить этому конец...
edit 3: я предложил награду за это. Недавно я попробовал другую шайбу.
<script src="/node_modules/core-js/client/shim.min.js"></script>
Это все еще не работает для меня. Я получаю ту же исходную синтаксическую ошибку.
Глядя на мой файл main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
Если я закомментирую 3-ю строку, ошибки в веб-консоли исчезнут, но теперь, конечно, мое приложение не загружается.
Просто для удовольствия, вот мой tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "system",
"moduleResolution": "node",
"experimentalDecorators": true
},
"exclude": [
"node_modules",
"jspm_packages"
]
}