Angular2 + webpack无法部署robots.txt文件

22

我正在使用 Angular2@2.1.2 创建一个网站。

我使用 Webpack 作为依赖项并使用默认设置。

这是我的 package.json 文件:

"dependencies": {
"@angular/common": "2.1.2",
"@angular/compiler": "2.1.2",
"@angular/core": "2.1.2",
"@angular/forms": "2.1.2",
"@angular/http": "2.1.2",
"@angular/platform-browser": "2.1.2",
"@angular/platform-browser-dynamic": "2.1.2",
"@angular/platform-server": "2.1.2",
"@angular/router": "3.1.2",
"@ngrx/core": "1.2.0",
"@ngrx/effects": "2.0.0",
"@ngrx/store": "2.2.1",
"angular2-toaster": "^1.0.1",
"awesome-typescript-loader": "2.2.1",
"bootstrap": "3.3.7",
"bootstrap-select": "1.11.2",
"eonasdan-bootstrap-datetimepicker": "4.17.42",
"es5-shim": "4.5.9",
"intl": "1.2.5",
"jquery": "3.1.0",
"moment": "2.15.1",
"ng2-modal": "0.0.21",
"ng2-pagination": "^0.4.1",
"ngrx-store-logger": "^0.1.7",
"npm": "3.9.3",
"reflect-metadata": "0.1.8",
"rxjs": "5.0.0-beta.12",
"ts-helpers": "1.1.1",
"zone.js": "0.6.25"
},
"devDependencies": {
"@types/jasmine": "2.2.34",
"angular-cli": "1.0.0-beta.19-3",
"codelyzer": "~0.0.26",
"core-js": "2.4.1",
"jasmine-core": "2.5.0",
"jasmine-spec-reporter": "2.7.0",
"karma": "1.3.0",
"karma-chrome-launcher": "2.0.0",
"karma-coverage": "1.1.1",
"karma-jasmine": "1.0.2",
"karma-phantomjs-launcher": "1.0.2",
"karma-remap-istanbul": "0.2.1",
"karma-verbose-reporter": "0.0.3",
"node-sass": "3.10.3",
"protractor": "4.0.5",
"ts-node": "1.3.0",
"tslint": "3.15.1",
"typescript": "2.0.2"
}

我在 assets/ 目录中添加了一个robots.txt文件。我以为构建器(npm build)会认识这个文件并把它放在应用程序的根目录下,但实际上没有,它仍然在 assets 目录中。

我有遗漏什么吗?

谢谢。

3个回答

41

我在这个问题中找到了解决方案:https://github.com/angular/angular-cli/issues/1942

robots.txt在src/目录中。
修改angular-cli.json文件。

"apps": [
{
  "root": "src",
  "outDir": "dist",
  "assets": ["assets", "robots.txt"],
 ....
使用assets数组声明你想要放置在dist/根目录中的文件。

22

我使用Angular6完成了这项工作。

将你的robots.txt文件放在src文件夹中,与favicon.ico文件处于同一文件夹中。

在你的angular.json文件中进行设置。

              "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/robots.txt"
            ],

您可能需要再次运行 ng serve,然后指向 http://localhost:4200/robots.txt


如果我正在缓存所有未知路由(路径:'**'),我该怎么办?我应该为robots.txt添加一个路由吗? - Raikish
2
我刚刚尝试了我的一个应用程序,似乎在使用Angular Universal服务器端渲染的Angular 10.1.1上运行良好。它没有(path:'')的问题,我建议您更新您的答案,删除“这只有在您的路由器模块中未捕获所有未知路由(path:'')时才起作用。”这句话。 - Raikish
这对我没有用,相反,glob在这里提到的方式起作用 https://dev59.com/Bbvoa4cB1Zd3GeqPwxjz - Naga

1
我希望我的robots.txt文件位于src/assets文件夹中,而不仅仅是src。我发现在angular.jsonassets数组中添加以下内容可以解决问题:
"assets": [
  "src/favicon.ico",
  "src/assets",
  {
    "glob": "robots.txt",
    "input": "src/assets",
    "output": "./"
  }
],

使用Angular Universal/SSR在Angular 10中运行。


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