@deepkit/angular-ssr

中文文档
1.1.0发布于 2026/11/01MITTypeScriptESM + CJS零依赖

Deepkit +棱角SSR

中文使用文档

Deepkit + Angular SSR

配置Deepkit App

  • 确保将主应用程序放入其中 app.ts 然后在你的 angular.json:

在 src/server/app.ts:

import { App } from '@deepkit/app';
import { FrameworkModule } from '@deepkit/framework';
import { AngularModule, RequestHandler } from '@deepkit/angular-ssr';

const app = new App({
  controllers: [
    // your controllers
  ],
  providers: [
    // your providers
  ],
  imports: [
    new FrameworkModule({}),
    new AngularModule({
      moduleUrl: import.meta.url,
    })
  ]
});

const main = isMainModule(import.meta.url);

if (main) {
  void app.run(); //allows to call all CLI commands, including server:start
}

export const reqHandler = main
  //when in main, we don't want to create a new request handler
  ? () => undefined
  : app.get(RequestHandler).create();
{
  "builder": "@angular-devkit/build-angular:application",
  "options": {
    "outputPath": "dist/app",
    "index": "src/index.html",
    "server": "src/main.server.ts",
    "outputMode": "server",
    "ssr": {
      "entry": "src/server/app.ts"
    },
    "browser": "src/main.ts"
  }
}

一定要有 src/server/app.ts 同样在您的tsconfig中。

配置Angular应用

在 app/app.config.ts (客户端):

@Injectable()
export class APIInterceptor implements HttpInterceptor {
  constructor(@Inject('baseUrl') @Optional() private baseUrl: string) {
    // In client build, `baseUrl` is empty and should be inferred from the current location.
    // If this is not correct, you can simply define the `baseUrl` in the `providers` array of the `appConfig` object.
    this.baseUrl = baseUrl || (typeof location !== 'undefined' ? location.origin : '');
  }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const apiReq = req.clone({ url: `${this.baseUrl}/${req.url}` });
    return next.handle(apiReq);
  }
}

export const appConfig: ApplicationConfig = {
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: APIInterceptor,
      multi: true,
    },
    // your other providers
  ],
};

在 app/app.server.config.ts (服务器端):

import { appConfig } from './app.config';

const serverConfig: ApplicationConfig = {
  providers: [
    provideServerRendering(),
    provideServerRouting([
      {
        path: '**',
        renderMode: RenderMode.Server,
      },
    ]),
    {
      provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,
      deps: [REQUEST_CONTEXT],
      useFactory(context: any) {
        return { [context?.baseUrl]: context?.publicBaseUrl || '' };
      },
    },
    {
      provide: 'baseUrl',
      deps: [REQUEST_CONTEXT],
      useFactory: (context: any) => {
        return context?.baseUrl || '';
      },
    }
  ],
};

export const config = mergeApplicationConfig(appConfig, serverConfig);

版本与发布记录

@deepkit/angular-ssr 共发布 14 个版本,首次发布于 2025/02/16;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.1.0latest2026/11/012 天前
1.0.192025/09/221.1 年前
1.0.182025/09/221.1 年前
1.0.152025/06/261.4 年前
1.0.122025/06/051.4 年前
1.0.112025/06/021.4 年前

关于 @deepkit/angular-ssr 的常见问题

@deepkit/angular-ssr 是什么?

Deepkit +棱角SSR

如何安装 @deepkit/angular-ssr?

在项目目录运行 npm install @deepkit/angular-ssr,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@angular/ssr(^22.2.5)、@deepkit/app(^1.1.0)、@deepkit/http(^1.1.0)、@deepkit/event(^1.1.0)、@deepkit/logger(^1.1.0)、@deepkit/framework(^1.1.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@deepkit/angular-ssr 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@deepkit/angular-ssr 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@deepkit/angular-ssr 可以商用吗?

@deepkit/angular-ssr 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@deepkit/angular-ssr 还在维护吗?

最新版本 1.1.0 发布于 2026/11/01(2 天前);至今共发布 14 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/02/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。