Angular + Firebase 托管:如何在网站根目录中使用静态 js 文件?

Angular + Firebase hosting: how to use static js file in website root?

我正在使用 Angular 和 Firebase 制作 PWA。使用 StackBlitz 进行开发。

我想让 "Add to home screen" Chrome 标准建议在用户在浏览器中打开我的应用程序时起作用,但我无法从我的代码中正确调用 "service worker" JS...

我在项目的 /src 文件夹中创建了 sw.js。我已将它添加到 .angular-cli.json 和 .angular.json 中的 'scripts' 和 'assets' 部分。在 StackBlitz 中一切正常!

但是当我将项目部署到 Firebase 时(使用 Stackblitz 内置功能)没有任何效果......似乎服务器没有在预期的目录中看到文件(/src/sw.js)......做了有人遇到同样的问题吗?

我认为没有办法修复它,我很确定问题出在 stackblitz 服务器上。但幸运的是 firebase 工程师做了一个简单的 node script 来替换单个文件。它对我有用。正如 link 描述的那样,只需安装 git 和节点,然后在命令提示符下 运行 这些命令: git

  1. git 克隆 https://gist.github.com/e00c34dd82b35c56e91adbc3a9b1c412.git firebase 托管部署文件
  2. cd firebase-hosting-deploy-file
  3. npm 安装
  4. 然后将你的 javascript 文件添加到与 stackblitz 相同的文件树中,对我来说它是在 src/assets/scripts/alert.js 中,所以我用我的脚本文件夹创建了一个资产文件夹js文件里面。在 firebase-hosting-deploy-file 目录中完成这一切。
  5. 提示中的 运行:"node deployFile.js [commit]",对于我的文件结构,它是 "node deployFile.js otherproject-a5722 /assets/scripts/alert.js commit"

附加信息:

我试过重现您的问题,如果 link 有效,请告诉我。 https://stackblitz.com/edit/angular-epvm8w。基本上就在index.html。 js 文件只有 alert("alert");在里面。它像你说的那样工作,但在部署时我认为 stackblitz 服务器正在用 html 替换内容。我认为这是因为在 chrome 开发人员面板中,js 文件与来自 stackblitz 的 github 的索引模板具有相同的 html。让我认为这只是一个错误。 css 文件也发生了同样的事情。