You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Angular Universal中使用jQuery出现ReferenceError: $ is not defined错误

Angular Universal 集成后 jQuery "$ is not defined" 问题解决

问题原因

Angular Universal 运行在 Node.js 服务端环境时,angular.json 中配置的脚本仅会在浏览器端加载,服务端无法访问这些前端资源,因此抛出 ReferenceError: $ is not defined 错误。

解决方案

1. 安装 jQuery 及类型定义包

放弃本地脚本引用,改用 npm 包管理,确保服务端能识别 jQuery:

npm install jquery @types/jquery --save

2. 在服务端全局注入 jQuery

修改项目根目录下的 server.ts 文件,添加全局变量声明,让 Node.js 环境能识别 $ 和 jQuery:

import * as jquery from 'jquery';
// 注入全局变量
global['$'] = jquery;
global['jQuery'] = jquery;

3. 移除 angular.json 中的本地脚本引用

删除 scripts 数组内的 jQuery 相关本地文件路径:

// 移除这两行
"src/assets/js/jquery-3.6.0.min.js",
"src/assets/js/jquery-ui.js"

4. 兼容 jQuery UI 的服务端渲染

jQuery UI 依赖浏览器 DOM API,服务端渲染时直接执行会报错,需限定在浏览器环境下初始化相关逻辑:

import { Component, OnInit, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';

declare var $: any;

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  constructor(@Inject(PLATFORM_ID) private platformId: Object) {}

  ngOnInit(): void {
    // 仅在浏览器环境下执行 jQuery UI 相关代码
    if (isPlatformBrowser(this.platformId)) {
      $( "#datepicker" ).datepicker();
      // 其他 jQuery UI 初始化逻辑
    }
  }
}

内容的提问来源于stack exchange,提问作者Ravi Gajera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:24:56