我可以在没有服务器的情况下访问Angular 6 build吗?

时间:2019-03-07 12:53:35

标签: angular

上下文
对于客户,我将3D动画包装在交互式HTML / CSS / JS微型应用程序中。随着他们的需求变得越来越复杂,我想使用Angular 6作为框架来替代我的 from-scratch 基础。另外,他们需要它在没有Internet访问的情况下工作。

问题
动画必须在没有http服务器的情况下可以在本地打开。没有阿帕奇,什么都没有。我的客户需要这样简单:他们最多可以解压缩项目并打开index.html文件,但是安装任何东西都要求太多。

因此,我进行了一些测试,并构建了我之前设计的使用国际化的“真实” Angular 6应用程序。我发现在http服务器外部打开index.html文件会使应用程序中断,并显示以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at file:///assets/i18n/fr.json. (Reason: CORS request not http).[Learn More]

这是因为在没有服务器的情况下,CORS请求失败。我的内容未加载。

参考
This post似乎很有希望,但没有帮助。

我还认为有一种方法可以将file:///assets/i18n/fr.json替换为./assets/i18n/fr.json之类的东西,但是我在文档中找不到任何解释(我可能会错过它,但这对于像我这样的后端开发者来说是技术性的) 。

因此,我正在尝试搜索其他解决方法。有任何线索吗?

2 个答案:

答案 0 :(得分:0)

我认为不是。 Angular需要运行服务器。但是您可以在heroku上进行部署,并将其实时呈现给客户端。 否则,如果客户端要在其本地计算机上运行,​​他们必须安装软件包。

答案 1 :(得分:0)

解决了。因此,真正的问题是ngx-translate

This thread回答了我的问题,但是我的应用仍然被ngx-translate具有绝对file\\ URL的翻译文件所困扰。

因此,我不得不将ngx-translate与HTTP加载程序as explained here一起使用,但最重要的是,要在生产环境中更改文件的前缀(在app.module.ts中):

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http, "./assets/i18n/", ".json");
}

.之前的/assets是关键。这样一来,无需http服务器即可在本地打开,可翻译的Angular6应用。