AOT: Ошибка: Uncaught (в обещании): TypeError: Невозможно прочитать свойство '$' из неопределенного
Я пытаюсь опубликовать внешний проект Angular4 в производственной сборке AOT. После долгих часов получения углового клика для успешной сборки в режиме aot я смог наконец опубликовать интерфейс, который ранее был опубликован с помощью "build prod --aot false", и увидеть разницу между AOT и JIT. К сожалению, я получаю ошибку ниже, когда веб-приложение запускается в браузере.
Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined
Кажется, ошибка связана с jQuery (из-за $), который есть в app.module.ts.
'import * as $ from 'jquery';'
Но я понял, что это не было связано с jQuery, потому что я все еще получал ту же ошибку, даже если я полностью удалил ссылки и использование jQuery в своем приложении.
Примечание. Я получаю эту ошибку только в том случае, если интерфейсная программа была собрана с помощью "prod --aot true", но не при использовании приложения с "prod --aot false".
Обновление: я также понял, что у меня есть сервис SignalR в проекте, который имеет определение ниже, используя символ $.
export class SignalrWindow extends Window {
$: any;
}
Не уверен, что происходит. Любая помощь будет потрясающей!
2 ответа
Создайте новый файл определений (например, definitions.d.ts) и добавьте следующий код:
interface SignalrWindow extends Window {
$: any;
}
declare var window: SignalrWindow ;
Один из способов использовать jquery вместо установки зависимостей - добавить скрипт jquery в ваш index.html
файл и создать define
переменная.
index.html
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
app.module.ts
declare var $: any;
Недостатком этого является то, что IntelliSense не будет работать с определенными переменными.