怎樣將 Angular 項目部署到 Nginx 子目錄中

最近更新時間 2020-11-27 19:50:37

項目開發完成後,如果要把項目部署到 Nginx 的二級目錄,需要進行一些設置才能找到資源文件。下面用一個新建的 Welcome 項目部署到 Nginx 的 /admin 子目錄下來講解部署過程。

創建項目

創建一個 Welcome 項目,如果是部署到根目錄,直接使用 ng build --prod 編譯後部署到 Nginx ,修改 rewrite 規則即可。

ng new ng-build
編譯生成環境項目
ng build --prod

如果把上面生成的項目直接複製到根目錄即可成功部署項目,如果是需要路由的項目需要配置 Nginx 的 rewrite。上面編譯的項目放到二級目錄 /admin 下面頁面會出現空白,錯誤提示找不到 runtime 和 main 等文件。

可通過下面的方法解決二級目錄問題。

修改 HTML base

修改編譯後 index.html 文件的 base 為 /admin/ 如下所示:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>NgBuild</title>
  <base href="/admin/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
</body>
</html>

編譯時增加參數

編譯時增加 --base-href 參數,指定需要部署的目錄。

ng build --base-href /admin/ --prod

修改 angular.json

在 angular.json 文件中找到 production 下面的 fileReplacements,在同級後面添加 baseHref 參數,表示部署時的二級目錄,如下所示:

...
"production": {
  "fileReplacements": [
    {
      "replace": "src/environments/environment.ts",
      "with": "src/environments/environment.prod.ts"
    }
  ],
  "baseHref": "/admin/",
  "optimization": true,
  "outputHashing": "all",
  "sourceMap": false,
  ...

以上三種方法都可以完成 Nginx 二級目錄的部署。

配置 Nginx

如果 Angular 項目帶有 Router(路由)功能,需要設置 Nginx 的 rewrite 如下所示。

server {
  root /html;
  location /admin/ {
    try_files $uri $uri/ /index.html;
  }
}
rss_feed