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

Angular 18 SSR使用isomorphic-dompurify为何出现运行时类型错误?

Angular 18 SSR 中使用 isomorphic-dompurify 运行时报错的解决方案

问题背景

在 Angular 18 SSR 项目中安装 isomorphic-dompurify@^2.15.0 后,使用标准调用代码可正常构建:

import DOMPurify from "isomorphic-dompurify";
DOMPurify.sanitize(dirtyHtml);

但运行时触发以下错误:

[vite] Error when evaluating SSR module /main.server.mjs:
|- TypeError: Cannot convert undefined or null to object
    at Function.getPrototypeOf (<anonymous>)
    at node_modules/whatwg-url/lib/utils.js (C:...\angular\cache\18.2.1\vite\deps_ssr\isomorphic-dompurify.js:19369:41)     
    at __require2 (C:...\angular\cache\18.2.1\vite\deps_ssr\chunk-2FDURXR6.js:51:50)
    at node_modules/whatwg-url/lib/URL.js (C:...\angular\cache\18.2.1\vite\deps_ssr\isomorphic-dompurify.js:22241:17)       
    at __require2 (C:...\angular\cache\18.2.1\vite\deps_ssr\chunk-2FDURXR6.js:51:50)
    at node_modules/whatwg-url/webidl2js-wrapper.js (C:...\angular\cache\18.2.1\vite\deps_ssr\isomorphic-dompurify.js:22648:16)
    at __require2 (C:...\angular\cache\18.2.1\vite\deps_ssr\chunk-2FDURXR6.js:51:50)
    at node_modules/whatwg-url/index.js (C:...\angular\cache\18.2.1\vite\deps_ssr\isomorphic-dompurify.js:22662:9)
    at __require2 (C:...\angular\cache\18.2.1\vite\deps_ssr\chunk-2FDURXR6.js:51:50)
    at node_modules/jsdom/lib/api.js (C:...\angular\cache\18.2.1\vite\deps_ssr\isomorphic-dompurify.js:141933:21)

该问题与 Angular 15 Universal 中出现的同类未解决问题逻辑一致。

可行解决方案

1. 区分客户端/服务端导入逻辑

由于 isomorphic-dompurify 在服务端依赖 jsdom,而 Vite SSR 对 Node.js 模块的打包处理存在兼容性问题,可通过环境判断手动初始化:

let DOMPurify: any;

// 服务端环境手动初始化 DOMPurify + JSDOM
if (typeof window === 'undefined') {
  const { JSDOM } = require('jsdom');
  const dompurify = require('dompurify');
  DOMPurify = dompurify(new JSDOM('').window);
} else {
  // 客户端直接使用 isomorphic-dompurify
  DOMPurify = require('isomorphic-dompurify');
}

// 使用示例
const sanitizedHtml = DOMPurify.sanitize(dirtyHtml);

2. 配置 Vite SSR 外部化依赖

将 jsdom、whatwg-url 等 Node.js 模块标记为外部依赖,避免 Vite 打包时对其进行转译处理:
在项目根目录的 vite.config.ts 中添加配置:

import { defineConfig } from 'vite';
import angular from '@angular-devkit/build-angular/src/vite/index';

export default defineConfig({
  plugins: [angular()],
  ssr: {
    external: ['jsdom', 'whatwg-url']
  }
});

3. 降级 isomorphic-dompurify 版本

尝试降级至 2.12.x 版本,部分用户反馈该版本在 Angular SSR 环境中兼容性更好,可通过以下命令安装:

npm install isomorphic-dompurify@2.12.0

内容的提问来源于stack exchange,提问作者Alex Pappas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:51:08