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 не будет работать с определенными переменными.

Другие вопросы по тегам