soarli

Nativefier打包Web应用为独立EXE踩坑笔记
前言近期有一场景,希望使用独立的exe程序封装内置浏览器并默认打开某一web项目而不是给出一个url,与此同时,最...
扫描右侧二维码阅读全文
01
2025/01

Nativefier打包Web应用为独立EXE踩坑笔记

前言

近期有一场景,希望使用独立的exe程序封装内置浏览器并默认打开某一web项目而不是给出一个url,与此同时,最好能弱化浏览器的存在以增强程序的“独立感”。经过在网上的探索,发现了Nativefier这一工具可以近乎完美的解决问题。

实现

一、安装Node环境

打开node官网并进行下载安装最新版node:https://nodejs.org/en

安装过程一直默认安装,点击下一步,不要修改安装路径

以管理员模式运行命令行窗口,输入指令:

npm -v

应出现安装的node版本。

二、安装环境

(1)以管理员运行命令行窗口

(2)输入指令,即可自动安装(如果安装没有出现问题,不需要执行 3、4两个步骤)

npm install nativefier -g

(3)如果安装过程中发现一直卡在了一个提示:sill idealTree buildDeps,这是因为无法获取原始源,只需要修改源地址为淘宝源即可。按下Ctrl+C取消下载,然后输入指令:

npm config set registry https://registry.npm.taobao.org

​ (4)修改后,重新执行:npm install nativefier -g指令即可

到此,环境安装完毕。

三、exe打包

​ (1)找到你想要打包的地址,比如:https://www.soarli.top/

​ (2)输入指令:

nativefier --name "测试打包" "https://www.soarli.top/"

(3)打包成功,打包后的文件在如图所示路径下。

image-20250101221731047

四、运行测试

双击exe运行测试,测试成功:

image-20250101222212545

参数与配置项

nativefier –name “blog” “https://www.xxx.cn/”
nativefier –icon <path>:设置图标 icon参数 
Windows环境下为.ico文件
Linux下为.png
Mac下 icon参数可以是a .icns或.png文件

--app-copyright :应用的版权信息

-p, --platform <value>:指定输出不同系统的应用,可选参数linux、windows、osx。

-m, –show-menu-bar:指定是否应该显示菜单栏。

--disable-context-menu:禁用上下文菜单

--disable-dev-tools:停用Chrome开发者工具

--clear-cache:防止应用程序在两次启动之间保留缓存。

--tray:托盘,防止用户点击右上角关闭按钮后直接关闭程序,而是缩小到右下角的托盘中。

--always-on-top:总是在最前面显示。

--maximize:开始的时候最大化。

--full-screen:使打包的应用全屏启动。

--app-version <value>:应用程序的发行版本。

–width <value>:打包应用程序的宽度,默认为1280px。

–height <value>:打包应用程序的高度,默认为800px。

–min-width <value>:打包应用程序的最小宽度,默认为0。

–min-height <value>:打包应用程序的最小高度,默认为0。

–max-width <value>:打包应用程序的最大宽度,默认为无限制。

–max-height <value>:打包应用程序的最大高度,默认为无限制。

–x <value>:打包的应用程序窗口的X位置。

–y <value>:打包的应用程序窗口的Y位置。

-a, --arch <value> 处理器架构

//示例
nativefier --name "软件名称" "http://xx.xx.xx.xx:8080" --min-width 1920 --min-height 1080 --full-screen -x 0 -y 0  --icon "F:\icon.ico"

这里打包的是托盘,防止用户点击右上角关闭按钮后直接关闭程序,而是缩小到右下角的托盘中的exe.

nativefier "https://px.xxxx.com/static/admin/#/login" --name "软件名称" --tray --icon D:\Users\012472\Desktop\8ffdba72d5991781c47e2bf42025551.ico --file-download-options "{\"saveAs\": true}"

image-20250101223037584

image-20250101223053503

修复bug & 优化体验

下载文件体验糟糕

默认情况下,用户在客户端里面下载文件后没有任何反应,给人的感觉是类似于微信内置浏览器,无法下载。

但是实际上并不是这样的,它会自动下载到系统的默认下载路径下。

为了优化这个场景体验,我们可以找到resources\app\lib\main.js 大约4380

if (options.saveAs) {
item.setSaveDialogOptions({defaultPath: filePath});
} else {
item.setSavePath(filePath);
}

if (options.saveAs)判断条件添加一个叹号就可以if (!options.saveAs)

image-20250101225507260

这样一来,用户在涉及文件下载的场景,程序每次都会问其要下载到哪里。

独立封装

到现在,虽然有了exe运行方式,但是要想对外分发,得连带一大堆dll等资源一起甩出去才可以,不然别人无法打开。

我希望能拿出一个单exe文件便于传播,但是找了许久没找到官方给出相关教程,于是只好采用自解压包的形式来实现。

一、全选文件打包rar

全选并压缩为一个rar文件:

image-20250101223513763

二、打开,选择自解压格式

image-20250101223612164

三、点高级选项

image-20250101223647753

四、配置相关参数

image-20250101223742186

image-20250101223826062

image-20250101223848110

image-20250101223908453

点击确定即可完成。

参考资料:

将在线网站打包为exe程序直接运行_网站打包exe-CSDN博客

Nativefier—使用—快速将网站打包成桌面程序-CSDN博客

nativefier/API.md 在 master ·nativefier/nativefier ·GitHub的

Nativefier把网页打包成exe-CSDN博客

GitHub - nativefier/nativefier: Make any web page a desktop application

nativefier打包桌面应用的时候,程序内下载文件自定义路径 - 织梦OK (imtr.cn)

应用错误收集 (thinbug.com)

基于electron的一键制作网站客户端工具,nativefier入门教程 (newsn.net)

Nativefier: 将任何网页转换成桌面应用程序-CSDN博客

Nativefier 常见问题解决方案-CSDN博客

用WinRAR将exe与所依赖的dll与资源打包成一个exe_winrar合并exe+dll-CSDN博客

nativefier打包桌面应用的时候,程序内下载文件自定义路径 - 织梦OK (imtr.cn)

最后修改:2025 年 01 月 01 日 11 : 00 PM

发表评论