3

我正在关注官方 Angular Universal 指南,网址为

https://angular.io/guide/universal

但是当我运行ng build --prod它时,它会生成客户端包,但不会生成服务器包。

由于我的环境是 ASP.Net Core,所以我跳过Universal Webpack configurationserver.ts.

使用以前版本的 Angular CLI,我们能够通过在构建时指定应用程序来构建服务器包ng build --app=ssr

我错过了什么吗?有人可以帮忙吗?

4

1 回答 1

1

修复:但有一件事,更新过程没有带来字段deployUrl,这导致我的应用程序在运行节点 dist/server.js 时无法找到捆绑包。所以我将它添加回 angular.json 并且它起作用了。不确定这是否与您的情况相似。

Edit2:因此,更新的 build-angular:server 被优化为只生成服务器端渲染所需的代码。所以不需要生成诸如scripts.15e6d454b35fa67e195e.jsor之类的包polyfills.7f343fe54490ee5246c8.js,它们嵌入在main.js.


编辑:我刚刚意识到由于编译过程的许多变化,使用 build-angular:browser 不会生成服务器端兼容包。(存在多个窗口参考)


在 Angular 6 中,他们选择了一个不同的构建器,它使用:

"builder": "@angular-devkit/build-angular:server",

使用此构建器,这些字段不知何故不可用。我不确定服务器构建配置没有从我们的主应用程序扩展是否是一个错误,或者我们不应该为build-angular:server.

"polyfills": "src/polyfills.ts",
"assets": [
  // Your assets
],
"styles": [
  // Your global styles
],
"scripts": [
  // Your global scripts
]

使 Angular Universal 像 Angular 6 之前一样工作的解决方法是使用浏览器构建器来捆绑您的服务器应用程序。

您应该熟悉该过程,只需从中复制配置"architect/build"并替换与服务器端相关的字段即可。

例如:

"outputPath": "dist/server",
"main": "src/main.server.ts",
"tsConfig": "src/tsconfig.server.json",

注意:您应该通过 CLI 参数或将服务器的配置更改为angular.jsonserver.ts 可以引用条目来禁用输出散列

于 2018-05-27T00:19:29.573 回答