【问题标题】:Angular 11 SSR is compiled,but having issue with prod build and serve no content showed up in browserAngular 11 SSR 已编译,但 prod 构建和服务出现问题,浏览器中未显示任何内容
【发布时间】:2021-01-25 07:18:02
【问题描述】:
{
   "$schema":"./node_modules/@angular/cli/lib/config/schema.json",
   "version":1,
   "newProjectRoot":"projects",
   "projects":{
      "new-asasa":{
         "projectType":"application",
         "schematics":{
            
         },
         "root":"",
         "sourceRoot":"src",
         "prefix":"app",
         "architect":{
            "build":{
               "builder":"@angular-devkit/build-angular:browser",
               "options":{
                  "outputPath":"dist/new-asasa/browser",
                  "index":"src/index.html",
                  "main":"src/main.ts",
                  "polyfills":"src/polyfills.ts",
                  "tsConfig":"tsconfig.app.json",
                  "aot":true,
                  "assets":[
                     "src/favicon.ico",
                     "src/assets"
                  ],
                  "styles":[
                     "src/styles.scss",
                     "node_modules/intl-tel-input/build/css/intlTelInput.css",
                     "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
                  ],
                  "scripts":[
                     "node_modules/intl-tel-input/build/js/intlTelInput.min.js",
                     "node_modules/jquery/dist/jquery.min.js"
                  ],
                  "allowedCommonJsDependencies":[
                     "rxjs-compat",
                     "lodash"
                  ]
               },
               "configurations":{
                  "production":{
                     "fileReplacements":[
                        {
                           "replace":"src/environments/environment.ts",
                           "with":"src/environments/environment.prod.ts"
                        }
                     ],
                     "optimization":true,
                     "outputHashing":"all",
                     "sourceMap":false,
                     "namedChunks":false,
                     "extractLicenses":true,
                     "vendorChunk":false,
                     "buildOptimizer":true,
                     "budgets":[
                        {
                           "type":"initial",
                           "maximumWarning":"4mb",
                           "maximumError":"7mb"
                        },
                        {
                           "type":"anyComponentStyle",
                           "maximumWarning":"20kb",
                           "maximumError":"20kb"
                        }
                     ]
                  }
               }
            },
            "serve":{
               "builder":"@angular-devkit/build-angular:dev-server",
               "options":{
                  "browserTarget":"new-asasa:build"
               },
               "configurations":{
                  "production":{
                     "browserTarget":"new-asasa:build:production"
                  }
               }
            },
            "extract-i18n":{
               "builder":"@angular-devkit/build-angular:extract-i18n",
               "options":{
                  "browserTarget":"new-asasa:build"
               }
            },
            "test":{
               "builder":"@angular-devkit/build-angular:karma",
               "options":{
                  "main":"src/test.ts",
                  "polyfills":"src/polyfills.ts",
                  "tsConfig":"tsconfig.spec.json",
                  "karmaConfig":"karma.conf.js",
                  "assets":[
                     "src/favicon.ico",
                     "src/assets"
                  ],
                  "styles":[
                     "src/styles.scss"
                  ],
                  "scripts":[
                     "node_modules/intl-tel-input/build/js/intlTelInput.min.js"
                  ]
               }
            },
            "lint":{
               "builder":"@angular-devkit/build-angular:tslint",
               "options":{
                  "tsConfig":[
                     "tsconfig.app.json",
                     "tsconfig.spec.json",
                     "e2e/tsconfig.json",
                     "tsconfig.server.json"
                  ],
                  "exclude":[
                     "**/node_modules/**"
                  ]
               }
            },
            "e2e":{
               "builder":"@angular-devkit/build-angular:protractor",
               "options":{
                  "protractorConfig":"e2e/protractor.conf.js",
                  "devServerTarget":"new-asasa:serve"
               },
               "configurations":{
                  "production":{
                     "devServerTarget":"new-asasa:serve:production"
                  }
               }
            },
            "server":{
               "builder":"@angular-devkit/build-angular:server",
               "options":{
                  "outputPath":"dist/new-asasa/server",
                  "main":"server.ts",
                  "tsConfig":"tsconfig.server.json"
               },
               "configurations":{
                  "production":{
                     "outputHashing":"media",
                     "fileReplacements":[
                        {
                           "replace":"src/environments/environment.ts",
                           "with":"src/environments/environment.prod.ts"
                        }
                     ],
                     "sourceMap":false,
                     "optimization":true
                  }
               }
            },
            "serve-ssr":{
               "builder":"@nguniversal/builders:ssr-dev-server",
               "options":{
                  "browserTarget":"new-asasa:build",
                  "serverTarget":"new-asasa:server"
               },
               "configurations":{
                  "production":{
                     "browserTarget":"new-asasa:build:production",
                     "serverTarget":"new-asasa:server:production"
                  }
               }
            },
            "prerender":{
               "builder":"@nguniversal/builders:prerender",
               "options":{
                  "browserTarget":"new-asasa:build:production",
                  "serverTarget":"new-asasa:server:production",
                  "routes":[
                     "/"
                  ]
               },
               "configurations":{
                  "production":{
                     
                  }
               }
            }
         }
      }
   },
   "defaultProject":"new-asasa",
   "cli":{
      "analytics":false
   }
}

npm run dev:ssr 工作正常,还显示浏览器中加载的 ssr 内容。 但是当我为生产构建 ssr 运行 npm run build:ssr && npm run serve:ssr 时不起作用。

   "dev:ssr": "ng run new-asasa:serve-ssr",
    "serve:ssr": "node dist/new-asasa/server/main.js",
    "build:ssr": "ng build --prod && ng run new-asasa:server:production",
    "prerender": "ng run new-asasa:prerender"    "dev:ssr": "ng run new-asasa:serve-ssr",
    "serve:ssr": "node dist/new-asasa/server/main.js",
    "build:ssr": "ng build --prod && ng run new-asasa:server:production",
    "prerender": "ng run new-asasa:prerender"`

【问题讨论】:

  • 您在构建和/或运行时看到的错误是什么?
  • @Raz Ronen 我没有收到任何错误,它刚刚编译成功。
  • 浏览器的控制台有什么问题吗?
  • @Raz Ronen no bro 完全干净的控制台在浏览器中没有警告没有错误:|
  • 你在网络请求中看到了什么?你的 .html 被提取了吗?以后会获取任何 javascript 吗?

标签: angular typescript server-side-rendering angular-universal


【解决方案1】:

我不明白你的 serve:ssr 任务背后的逻辑,好像你还没有理解 Angular Universal 的基础知识以及它是如何设置的。

node dist/new-asasa/server/main.js 提供的已编译 SSR 代码只是应用程序代码。如果你尝试直接使用 Node 运行它,它不会做任何事情。此编译文件将用作服务器的视图引擎的基础。每当有人调用您的服务器时,您都必须使用此代码在服务器上呈现 HTML 页面,然后将它们发回。这是需要设置的东西,它不是开箱即用的,因为 Angular 不知道您将使用哪个服务器。

serve-ssr 任务看起来像是最近添加的便利实用程序,它可能会让您误以为事情比实际简单。

不管怎样,这里解释的太多了,请关注official tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2011-02-19
    • 2015-10-10
    • 2020-05-27
    • 2021-09-07
    • 2023-03-29
    • 2013-07-24
    相关资源
    最近更新 更多