bramblex / niva

一个基于 Tauri WRY 跨端 Webview 库的超轻量极易用的跨端应用开发框架。
https://bramblex.github.io/niva/
MIT License
644 stars 35 forks source link

打包生成可执行程序的原理疑问 #40

Closed liudonghua123 closed 1 year ago

liudonghua123 commented 1 year ago

你好,我体验了一下这个小工具,确实很方便,所有就好奇看了一下构建生成可执行程序部分的代码,这个似乎是使用隐藏在 NivaDevtools.exe 里的 ResourceHacker.exe 对 NivaDevtools.exe + 一些压缩的资源进行打包的么?这个打包过程中会删除 NivaDevtools.exe 中不用的东西,减少体积是么? 我对 ResourceHacker.exe 没怎么了解过,只是用其来对 exe 设置图标用过。

https://github.com/bramblex/niva/blob/02c32f8650decc64a1b70c9a019b1c8479debe34/packages/devtools/src/build-scripts/build-windows.ts#L101-L118

liudonghua123 commented 1 year ago

这个相比 tauri 打包(一般需要花费很长时间)的可执行程序来说,运行有没有损失,损失多少,有其他什么利弊么?

bramblex commented 1 year ago

一个 Niva 可执行文件有两个部分组成:

  1. Niva 主程序
  2. 资源文件(包括程序运行的代码和静态资源如 html / js / css / 图片等)

Niva 主程序在编译发布以后就一直不变了,我们使用的 NivaDevtools.exe 其实就相当于 Niva 主程序 + Niva Devtools 代码和资源。而 NivaDevtools.exe 构建其他应用的过程,就是吧 NivaDevtools.exe 自己本身复制了一遍然后把 NivaDevtools.exe 的资源文件替换成目标应用的资源文件即可。

这个构建方式是利用了 Windows 的可执行文件可以嵌入 Resource 实现的https://learn.microsoft.com/en-us/windows/win32/menurc/enumerating-resources

Niva 只对资源文件进行构建和替换,Niva 主程序不需要重新构建。而 Tauri 是从 rust 源码开始构建的,所以实际上完全不是一回事没办法进行比较。

liudonghua123 commented 1 year ago

嗯嗯,谢谢您细致的详解 👍