是否可以在没有服务器的情况下运行angular 8应用程序(脱机)?

是否可以在没有服务器的情况下运行angular 8应用程序(脱机)?,angular,offline,Angular,Offline,我有一个应用程序必须在不提供服务的情况下运行。生成一个html文件,它需要的一切都在里面。我将jquery与bootstrap结合使用(我只是直接在html中导入它们),但是我想改为Angular 8,例如,因为项目越来越大。我相信Angular会发出http请求来读取文件、模板,可能还有路由等等,正如我们所知,浏览器不允许在没有http服务器的情况下读取文件 问:是否有任何angular/ng cli构建指令或开发指南(例如,非延迟加载模块)允许我构建脱机独立应用程序(仅打开html文件) 当

我有一个应用程序必须在不提供服务的情况下运行。生成一个html文件,它需要的一切都在里面。我将jquery与bootstrap结合使用(我只是直接在html中导入它们),但是我想改为Angular 8,例如,因为项目越来越大。我相信Angular会发出http请求来读取文件、模板,可能还有路由等等,正如我们所知,浏览器不允许在没有http服务器的情况下读取文件

问:是否有任何angular/ng cli构建指令或开发指南(例如,非延迟加载模块)允许我构建脱机独立应用程序(仅打开html文件)

当我使用
ngbuild--prod
构建应用程序时,生成的文件仍然需要一个服务器。我在chrome上遇到以下错误:

不允许加载本地资源


(进行一些编辑以使其更加清晰)

我处在一个限制性很强且多样化的操作系统业务环境中,无法生成二进制文件。每个人的电脑里都有浏览器,但不是每个人都能上网。那么脱机运行html是必需的


这是一个过程:我生成一个html文件,然后我将此html文件发送给无法访问internet的用户,然后他们在浏览器中单击即可打开它。没有http服务器可以访问生成的html。

如果我正确理解您的问题,Angular打包后,您不需要任何东西来运行它,因此为什么您可以将其打包并作为静态网站提供给Amazon Web Services S3 bucket(“无服务器”)之类的地方。您可以在断开连接的环境中读取JSON文件,只要它们是项目的本地文件。它可能看起来如下所示:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { IDataFile } from '../interfaces/data-file.interface';

@Injectable({
    providedIn: 'root'
})
export class MyDataService {
    static data: IDataFile;
    constructor(private http: HttpClient) { }
    load() {
       const jsonFile = `assets/data/my-data.json`;
        return new Promise<void>((resolve, reject) => {
            this.http.get(jsonFile).toPromise().then((response: IDataFile) => {
                MyDataService.data = <IDataFile>response;
                resolve();
            }).catch((response: any) => {
                reject(`Could not load file '${jsonFile}': ${JSON.stringify(response)}`);
            });
        });
    }
}
然后,您可以在应用程序中的任何位置使用
MyDataService.data.somedata

所有这些的主要警告是,正如我所说的,您可以读取JSON文件,但不能写回它,因此除了内存中的数据之外,您不能更新这些数据(数据是非持久性的,在重新加载时会重置)。如果您使用本地会话存储或本地存储,甚至cookie,然后在本地存储已填充的情况下覆盖预加载的数据,您可以在一定程度上解决这一问题;但在这种情况下,数据将没有中央管理,所以它必须是一个特定的用例


如果您希望写入文件系统上的文件,我会为您的Angular应用程序(如Electron())查看桌面应用程序包装器,但这需要为您的用户安装。

我没有,但很难理解您想要实现什么?它可能是一个桌面应用程序,可以让你更好地访问本地文件。如果它是一个有角度的web应用程序,那么当涉及到可以导入的文件时,您将有很多限制。您还需要手动导入html文件吗?最重要的是,你尝试了什么?谢谢你的评论。现在我可以改进我的问题了。我在一个商业环境中,所以我有一些限制。我同意它可能是一个桌面应用程序,但在这种情况下,涉及到很多操作系统。此外,每个人都安装了一个浏览器,这样更容易分发。分发二进制文件会导致很多IT问题和权限。html文件是自动生成的。然后,在这一代人中,当人们点击这个文件时,所有的东西都放在里面工作。我也喜欢霍洛维茨。
export function initializeApp(data: MyDataService ) {
return () => data.load();
}
...
providers: [
    MyDataService ,
    {
        provide: APP_INITIALIZER,
        useFactory: initializeApp,
        deps: [MyDataService], multi: true
    },
 ]