AOT: Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined

AOT: Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined

我正在尝试在 AOT 生产构建中发布 Angular4 前端项目。在长时间使用 angular cli 以 aot 模式成功构建之后,我终于能够发布之前使用 "build prod --aot false" 发布的前端,并了解 AOT 和 JIT 之间的区别。不幸的是,当 webapp 在浏览器中启动时,我遇到了错误。

Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined

错误似乎与我在 app.module.ts 中的 jQuery(因为 $)有关。

'import * as $ from 'jquery';' 

但我意识到这根本不是 jQuery 相关的,因为即使我完全删除了我的应用程序中的 jQuery 引用和用法,我仍然遇到相同的错误。

注意:如果前端是使用 "prod --aot true" 构建的,但当应用程序是使用 "prod --aot false"

构建时,我只会收到此错误

更新:我还意识到我在项目中有 SignalR 服务,它使用 $ 符号定义如下。

export class SignalrWindow extends Window {
    $: any;
}

不确定发生了什么。任何帮助都会很棒!

使用 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 无法使用 define 变量。

创建一个新的定义文件(例如:definitions.d.ts)并添加以下代码:

interface SignalrWindow extends Window {
    $: any;
}

declare var window: SignalrWindow ;