简体   繁体   English

Angular:如何在使用SSR时为开发中的资产设置baseHref

[英]Angular: How to set baseHref for assets in development when using SSR

In production we are setting the base href with:在生产环境中,我们设置 base href 为:

ng build --base-href /app/

This works well.这很好用。 Especially our assets are also served at /app/assets/ as expected.特别是我们的资产也按预期在/app/assets/提供服务。

I cannot achieve the same effect in development however, where we run:但是,在我们运行的地方,我无法在开发中达到相同的效果:

ng run project:serve-ssr

Assets remain at /assets and are not accessible at /app/assets .资产保留在/assets中,无法在/app/assets中访问。

Things I have tried in angular.json我在angular.json中尝试过的事情

  • setting architect.build.options.baseHref设置architect.build.options.baseHref
  • setting architect.serve.options.servePath设置architect.serve.options.servePath
  • setting architect.server.options.servePath (not allowed)设置architect.server.options.servePath (不允许)
  • setting architect.serve-ssr.options.servePath (not allowed)设置architect.serve-ssr.options.servePath (不允许)

I have also tried to set the DI token APP_BASE_HREF and provide it in the AppModue, but to no effect.我还尝试设置 DI 令牌APP_BASE_HREF并在 AppModue 中提供它,但没有效果。

Assuming you are using @nguniversal we solved this by creating a virtual path prefix in server.ts :假设您使用的是@nguniversal ,我们通过在server.ts中创建一个虚拟路径前缀来解决这个问题:

server.use(process.emv.BASE_HREF, express.static(distFolder));

The BASE_HREF is set as an environment variable during app start: BASE_HREF在应用程序启动期间设置为环境变量:

BASE_HREF=/app ng run project:serve-ssr

I ended up, rewriting the url in the express server in development.最后,我在开发中的 express 服务器中重写了 url。 Not super happy with that though, so if anybody has a better answer, I will happily accept that.不过对此并不满意,所以如果有人有更好的答案,我会很乐意接受。

In server.ts :server.ts中:

if (environment.removeAssetsPrefix.length) {
  server.use((req, _, next) => {
    if (req.url.startsWith(environment.removeAssetsPrefix + '/assets/')) {
      req.url = req.url.substring(environment.removeAssetsPrefix.length);
    }
    next();
  });
}

In environment.ts :environment.ts

export const environment = { 
  ...
  removeAssetsPrefix: '/app'
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Angular Monorepo 与 Basehref 共享资产 - Angular Monorepo shared assets with Basehref 更新到 Angular 11 时,BaseHref 在 scss 文件中不起作用 - BaseHref not working in scss files when updating to Angular 11 启用ssr时如何在Angular上使用localstorage - How to use localstorage on Angular when enabling ssr Node + Angular Universal SSR:渲染页面时如何设置设备宽度 - Node + Angular Universal SSR: how to set the device-width when rendering a page Angular 9 SSR - 在哪里设置 global['window'](使用多米诺骨牌)? - Angular 9 SSR - where to set global['window'] (using domino)? Angular 4和Universal SSR-在文件夹中使用URL时无法正确加载样式 - Angular 4 & Universal SSR - Style not loaded right when using URL with folders 与 Angular 通用应用程序 (SSR) 一起使用时,预加载策略会变慢 - Preloading strategy slow down when using with Angular universal app (SSR) 使用Angular Material(MatBottomSheet)和SSR时AWS Lambda超时 - AWS Lambda timeout when using Angular Material (MatBottomSheet) & SSR 如何防止 css animation 在 angular SSR 引导应用程序时再次发生 - How to prevent css animation to reoccur when angular SSR bootstraps the app Angular 通用 SSR 加载 static 资产处于预渲染阶段 - Angular Universal SSR loading static assets in prerender stage
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM