如何将网站作为单个文件提供?

How to provide a web site as a single file?

我在带有 10BASE-T 以太网 (CS8900) 的微型 16 位微控制器 (St10) 和基于 EasyWeb 项目的 Tcp/IP 实现上有一个裸机应用程序 运行ning。

有一个微型网络服务器用于显示设备的一些状态信息,还允许更改设置等。

对于浏览器访问,网络服务器提供了一些文件,如index.html*.css*.js*.svg*.png等。

由于裸机target没有像sd卡这样的存储介质,所以我把上面提到的所有资源都放在编译好的二进制文件中。

为了节省内存和减少流量,我将所有文件放在一个 index.html 压缩包中,使用 gzip 并让我的网络服务器使用 Content-Encoding: gzip 传送它。

将所有文件合并为单个 index.htm 的步骤目前是手动工作(包括替换文件名引用等)。可能有自动执行此操作的工具吗?

或者,我是否可以将所有文件压缩/tar/任何内容放入一个文件中,然后根据 http GET / 请求进行传送?

编辑 2017-10-05

使用inliner mentioned by 解决。

在 Kubuntu 16.04 主机上 运行 遇到了一些小问题,但最终通过安装修复了它:

sudo apt-get install nodejs
sudo ln -sT "$(which nodejs)" /usr/local/bin/node
sudo apt-get install npm
sudo npm install -g inliner

也许,我使用 nodejs-legacy 而不是 nodejs 摆脱了符号链接(没有尝试过)。 安装后,我只需要 运行:

inliner index.html >index-backed.html
gzip -c index-backed.html >index.html.gz

我对你想做什么有点困惑,但我猜你需要一种方法来节省一些存储空间,你可以尝试在 Google Drive 中存储一些文件吗?这样,您就不必担心那里的文件,您只需上传图像,然后像这样从驱动器中提取它们:

<img src="https://drive.google.com/uc?export=download&id=YOUR_FILE_ID">

当然可以用您的实际文件 ID 替换 YOUR_FILE_ID,通过使用 Google Drive 的共享 link 来获取它。像这样:

https://drive.google.com/file/d/YOUR_FILE_ID/view?usp=sharing

我认为这是比压缩它更好的解决方案,但选择权在您,希望这对您有所帮助!

选项 1:通过 Chrome

有一组两个 Chrome 扩展,可让您将网页保存到单个 HTML 文件:

第二个扩展是第一个扩展所需的辅助扩展。我没有对此进行测试,但它在 Chrome 网上商店中的评价似乎相当不错(显然它可能会在复杂的页面上阻塞)。

使用这些扩展程序,您应该能够在 Chrome 中打开页面并使用扩展程序将其另存为嵌入 CSS/scripts/images.

的单个文件

选项 2:可编写脚本

如果您想在脚本中实现自动化,还有一个 project on github 可以通过 npm 安装。