如何将网站作为单个文件提供?
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 安装。
我在带有 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 安装。