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

Angular 17单一独立组件SSR实现遇Worker未定义错误求助

Angular 17 独立组件 SSR 实现报错:Worker is not defined

操作步骤与问题

我在Angular 17项目中尝试为单个独立组件实现服务端渲染(SSR),执行了以下步骤:

  • 用 ng add @angular/ssr 初始化项目的SSR配置
  • 创建名为ssrdemo的独立模块
  • 删除自动生成的app.config.server.ts和main.server.ts,新建ssrdemo.config.server.ts和ssrdemo.component.server.ts并完成配置
  • 修改server.ts,引入自定义的bootstrap逻辑

运行后出现如下错误:

7:02:33 pm [vite] Internal server error: Worker is not defined
      at eval (d:/olsights-github/olsights-portal-react-sprint-ankit-task-7-8-9-SSRSINGLECOMPONENT/node_modules/weatherlayers-gl/dist/weatherlayers-deck.min.js:14:83602)
      at eval (d:/olsights-github/olsights-portal-react-sprint-ankit-task-7-8-9-SSRSINGLECOMPONENT/node_modules/weatherlayers-gl/dist/weatherlayers-deck.min.js:14:97037)
      at async instantiateModule (file:///D:/olsights-github/olsights-portal-react-sprint-ankit-task-7-8-9-SSRSINGLECOMPONENT/node_modules/vite/dist/node/chunks/dep-9A4-l-43.js:50861:9) (x2)

相关配置代码

ssrdemo.config.server.ts

import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
import { provideServerRendering } from '@angular/platform-server';
import { appConfig } from '../app.config';

const serverConfig: ApplicationConfig = {
  providers: [
    provideServerRendering()
  ]
};

export const config = mergeApplicationConfig(appConfig, serverConfig);

ssrdemo.component.server.ts

import { bootstrapApplication } from '@angular/platform-browser';
import { config } from './ssrdemo.config.server';
import { ServerModule } from '@angular/platform-server';
const bootstrap = () => bootstrapApplication(SSRdemoComponentServer, config);

export default bootstrap;

import { Component } from '@angular/core';

@Component({
    selector: 'app-ssrdemo',
    standalone: true,
    imports: [ServerModule],
    templateUrl: './ssrdemo.component.html',
    styleUrl: './ssrdemo.component.css'
})
export class SSRdemoComponentServer {

}

server.ts

import { APP_BASE_HREF } from '@angular/common';
import { CommonEngine } from '@angular/ssr';
import express from 'express';
import { fileURLToPath } from 'node:url';
import { dirname, join, resolve } from 'node:path';
import bootstrap from './src/app/ssrdemo/ssrdemo.component.server';

// 导出Express应用以便用于无服务器函数
export function app(): express.Express {
  const server = express();
  const serverDistFolder = dirname(fileURLToPath(import.meta.url));
  const browserDistFolder = resolve(serverDistFolder, '../browser');
  const indexHtml = join(serverDistFolder, 'index.server.html');

  const commonEngine = new CommonEngine();

  server.set('view engine', 'html');
  server.set('views', browserDistFolder);

  // 示例Express Rest API端点
  // server.get('/api/**', (req, res) => { });
  // 从/browser目录提供静态文件
  server.get('*.*', express.static(browserDistFolder, {
    maxAge: '1y'
  }));

  // 所有常规路由使用Angular引擎处理
  server.get('*', (req, res, next) => {
    const { protocol, originalUrl, baseUrl, headers } = req;

    commonEngine
      .render({
        bootstrap,
        documentFilePath: indexHtml,
        url: `${protocol}://${headers.host}${originalUrl}`,
        publicPath: browserDistFolder,
        providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
      })
      .then((html) => res.send(html))
      .catch((err) => next(err));
  });

  return server;
}

function run(): void {
  const port = process.env['PORT'] ?? 4000;

  // 启动Node服务器
  const server = app();
  server.listen(port, () => {
    console.log(`Node Express服务器运行于 http://localhost:${port}`);
  });
}

run();

内容的提问来源于stack exchange,提问作者Ankit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:35:03