Angular 4特定环境的robots.txt

6

有没有办法根据构建环境(dev、stage、prod)加载特定于环境的资源?我的.angular-cli.json中的资源配置如下:

"assets": [
   "assets",
   "favicon.ico",
   "web.config",
   "188e5a3d.png",
   "robots.txt"
  ],

我需要根据构建环境加载不同的 robots.txt 文件。我没有在 Apache 服务器上运行应用程序,因此我没有htaccess文件可以进行一些配置。谢谢。
3个回答

1

步骤1

创建一个名为robots的文件夹,并在其中创建3个子文件夹,分别命名为developmentstagingproduction(或者你想要的其他环境名称)。然后,在每个子文件夹中创建特定环境的robots.txt文件。

步骤2

angular.json文件中,为每个环境单独指定assets

{
  "architect": {
    "build": {
      "configurations": {
        "configurations": {
          "production": {
            "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/manifest.webmanifest",
              {
                "glob": "robots.txt",
                "input": "src/robots/production/",
                "output": "./"
              }
            ],
            ...
          },
          "staging": {
            "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/manifest.webmanifest",
              {
                "glob": "robots.txt",
                "input": "src/robots/staging/",
                "output": "./"
              }
            ],
            ...
          },
          "development": {
            "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/manifest.webmanifest",
              {
                "glob": "robots.txt",
                "input": "src/robots/development/",
                "output": "./"
              }
            ],
            ...
          }
        }
      }
    }
  }
}

0

有几种方法可以为不同的环境实现不同的robots.txt。

  • 最常见的方法

您可以创建所有不同的robots.txt,例如robots.txt、robots-staging.txt和robots-prod.txt。

并且在angular.json中,您可以使用fileReplacements在构建应用程序时根据构建模式更改robots.txt的内容。

{
  "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "angular": {
      "root": "",
      "projectType": "application",
      "prefix": "app",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/app/browser",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.browser.json",
            "deployUrl": "/",
            "assets": [
              {
                "glob": "favicon.ico",
                "input": "src",
                "output": "/"
              },
              {
                "glob": "robots.txt",
                "input": "src",
                "output": "/"
              },
              {
                "glob": "**/*",
                "input": "src/assets",
                "output": "/assets"
              }
            ],
            "styles": [
              "src/styles.scss",
            ],
            "scripts": [
              "src/assets/js/bootstrap-select.min.js",
            ]
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                },
                {
                  "replace": "src/robots.txt",
                  "with": "src/robots-prod.txt"
                }
              ],
              ...
            }
          }
        },
        ...
}
  • 部署管道

在这种情况下,您可以使用CI/CD工具来创建或更改robots.txt。

您可以参考相关文档中的操作步骤。

希望这能对您有所帮助!


5
不再起作用了(请参见https://github.com/angular/angular-cli/issues/14599#issuecomment-497704073)。文件替换应仅用于.ts文件。 - C0ZEN

-1

您可以将所有不同的robots.txt文件保存在assets中,并为每个环境创建多个环境文件。

例如:Prod:environment.prod.ts,environment.stage.ts

并在angular-cli.json中添加这些文件的配置。

在environment.prod.ts文件中添加生产配置robots.txt url的URL。

您可以在constants.ts中访问这些url,如roboturl:environment.robotUrl。

它将根据构建配置获取url。


我已经有不同的环境,但它们都在应用程序数组“environments”中指定。你能给我一个例子,如何为不同的环境配置不同的资产文件。谢谢。 - Ognyan
抱歉,我很忙,稍后会提供给您。 - Dharmaraj Kavatagi
2
robots.txt 需要放在根目录下,不需要从应用程序中链接。我认为这不是一个解决方案。 - David Poxon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接