使用Nativefier可将指定的URL(网站)打包成一个Windows窗口应用程序。生成的应用程序相当于一个浏览器,只是打开便自动访问相应的URL,且无地址栏。
用Nativefier生成的可执行程序,其优点是启动速度快,缺点是它无托盘图标。可以生成安装包的形式,也可以生成绿色版软件(zip)。
系统环境
- Windows 10 或以上的操作系统
- 已安装node.js,下载地址:
- 有能够访问https://github.com/electron/electron/releases的网络环境(若无,可切换为阿里提供的NPM源)
- 已安装Nativefier,安装命令:
npm install nativefier -g
注:键入以上命令后,系统会根据自动根据本操作环境,加装Chocolatey、python等依赖程序,以及一些Windows更新包。整个过程可能需要十分钟以上。
步骤
①打开稍后即将生成的程序的文件夹(如C:\抖音)
②在该文件夹地址栏中键入CMD,并回车
③在命令提示符中,键入以下的命令(切换为阿里NPM源,以解决code: 'ECONNRESET'
<网络连接被远程服务器强制中断>),并回车
setx ELECTRON_MIRROR "https://npmmirror.com/mirrors/electron/"
④在命令提示符中,键入类似以下的命令(开始生成)(任选其一),并回车
不指定图标:
nativefier --name "抖音" "https://www.douyin.com/"
或指定图标:
nativefier --name "抖音" --icon "C:\Users\administrator\Documents\favicon.ico" "https://www.douyin.com/"
或指定图标+指定最大化窗口:
nativefier --name "抖音" --icon "C:\Users\administrator\Documents\favicon.ico" --maximize "https://www.douyin.com"
增加托盘图标:
nativefier --name "抖音" --icon "C:\Users\administrator\Documents\favicon.ico" "https://www.douyin.com/" --tray
包含输出路径的:
nativefier --name "抖音" --icon "C:\Users\a\Documents\soft.ico" "https://www.douyin.com" --tray --out "C:\Users\a\Documents\抖音"
单独实例:
--single-instance
更改托盘中「退出」字样:
搜索「 label: 'Quit',
」,大约在10610行,将quit更改为「退出」。

增加托盘菜单超链接:
点击右上角的关闭按钮「×」自动停止播放:
- 打开生成好的根目录中的:\resources\app\lib\main.js
- 搜索「
mainWindow = await (0, mainWindow_1.createMainWindow)(appArgs, setDockBadge);
」大约位于283行 - 在此行下增加以下代码:
mainWindow.on('close', () => {
mainWindow.webContents.executeJavaScript(`
document.querySelectorAll('video').forEach(v => v.pause());
`).catch(err => console.error(err));
});
使用透明图标:
- 使用icofx把图标文件另存为png文件,直接:–icon “C:\Users\administrator\Documents\favicon.png”
多图层图标:
- trial可生成包含多个分辨率图层的图标(正规用法)。

图标缓存问题:
- 有时候看到的图标是缓存中的旧图标。更换路径可更新缓存。
注释:
- 「抖音」指要生成的程序的名称
- 「https://www.douyin.com/」指要打包的URL
- “C:\Users\administrator\Documents\favicon.ico”指要制定的ico图标,用于exe文件图标及打开后左上角显示的图标
- –maximize指最大化(提示:即便不指定最大化,那么用户手动最大化后关闭窗口,下次启动后仍为上次状态,即最大化状态)
其他问题
点击关闭按钮后,会自动最小化到托盘。但重新打开时,会闪一下,并不会出现窗口。
修改方案
经测试,同时采用方案1及2即可实现。
方案1(强烈推荐)
在 electron_1.app.requestSingleInstanceLock()
之前,先定义 mainWindow = null
,确保全局引用一直存在。你大部分地方其实已经做了,只是保险起见明确加上。
let mainWindow = null;
方案2(核心修改)
在你的 second-instance 事件里,给它做一个更稳妥的处理:
找到:
electron_1.app.on('second-instance', () => {
改成:
electron_1.app.on('second-instance', () => {
log.debug('app.second-instance');
if (!mainWindow) {
// 万一没有初始化好,则重新初始化
onReady().catch((err) => log.error('onReady ERROR', err));
return;
}
if (mainWindow.isMinimized()) {
mainWindow.restore();
}
if (!mainWindow.isVisible()) {
mainWindow.show();
}
mainWindow.focus();
});
方案3(如果想极致保险)
你甚至可以判断 mainWindow.isDestroyed()
,因为 Electron 窗口有时候已经被销毁:
javascript复制编辑if (mainWindow.isDestroyed()) {
onReady().catch((err) => log.error('onReady ERROR', err));
}
截图

安装Nativefier

打包https://www.douyin.com/

已经打包好了的抖音Windows程序

运行后的界面
附
Nativefier 应用的核心内核如下:
内核类型 | 所用内核 | 说明 |
---|---|---|
排版/渲染引擎 | Blink | 来自 Chromium,负责页面布局与渲染 |
JavaScript 引擎 | V8 | 同样来自 Chromium,用于执行网页中的 JS |
壳程序框架 | Electron | 用来把网页包成桌面程序(Windows/macOS/Linux) |
运行时 | Node.js + Chromium | Electron 内部就是 Node.js + Chromium 的组合 |
安装包
本工具仅可生成包含文件夹、主程序、相关文件的免安装绿色版软件。如需打包成安装包,需要再使用另外一款软件。