2024-02-22 记录一则NW.js桌面开发
nw.js,一个和Electron类似的桌面开发框架,相较于后者,我认为前者在打包这块更快速、简便。
在开发前,先把nw的环境给配置好,前往nw的官网下载:http://nwjs.org.cn/download.html
2025-02-21 更新:上面的链接似乎无法打开了,nw的官网似乎换地址了:https://nwjs.io/
sdk的下载链接:https://dl.nwjs.io/v0.96.0/nwjs-v0.96.0-win-x64.zip(如果你无法打开上面的下载链接的话就点这个)
我下的是sdk版的,normal版的没有调试,sdk的有,建议在开发中还是用sdk的为好,下载完了直接解压,到时候预览以及打包什么的都要用到里面的nw.exe。
开发过程就和平常开发前端网页一样,目录如下:
先新建一个文件夹,然后在里面添加两个文件:index.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>nw.js</title> </head> <body> <h1>Hello World</h1> </body> </html>
接着再新建个package.json,里面填写一些必要的配置,
{ "name": "nw-demo", "version": "0.0.1", "main": "index.html", "window": { "title": "nw-demo", "toolbar": false, "frame": true, "show_in_taskbar": true, "width": 800, "height": 500, "position": "mouse", "min_width": 400, "min_height": 200, "max_width": 800, "max_height": 600 } }
如何运行?把test文件拖到nw.exe上面,然后松开手,
哎!它会弹出一个窗口,这个窗口就是你刚才写得helloworld。
这时候就完成一半了,剩下的一半就是打包的操作:
把test文件夹压缩成test.nw,然后在nw.exe的目录里打开cmd,注意:是cmd而不是powershell(如何不在c盘打开cmd?你可以先打开cmd,然后再输入D:就能进入D盘)
好了,进入nw.exe对应的盘的cmd,然后输入命令:
copy /b nw.exe+test.nw test.exe
注意上面的代码中的加号+,它没有空格,copy /b的作用就是把多个文件合并成一个单独的文件,不会影响被操纵的文件
回车,然后你就能在nw.exe目录里找到test.exe,双击它,就能显示你写的helloworld。
结语:这种打包,只能在nw.exe的运行环境里面运行,也就是说还是处于开发环境的,上到生产还需其他步骤。
package.json配置(内容由ai整理):
1. 基础字段
name
- 类型: 字符串
- 描述: 应用程序的名称。
- 示例:
json深色版本
"name": "MyApp"
main
- 类型: 字符串
- 描述: 指定 NW.js 应用的入口文件(通常是 HTML 文件)。
- 示例:
"main": "index.html"
description
- 类型: 字符串
- 描述: 应用程序的描述信息。
- 示例:
"description": "这是一个基于 NW.js 的桌面应用"
version
- 类型: 字符串
- 描述: 应用程序的版本号,遵循语义化版本控制(如
1.0.0
)。 - 示例:
"version": "1.0.0"
2. 窗口配置 (window
)
window
对象用于定义主窗口的行为和外观。
title
- 类型: 字符串
- 描述: 窗口标题。
- 示例:
"title": "我的应用"
width
和 height
- 类型: 数字
- 描述: 设置窗口的初始宽度和高度(单位为像素)。
- 示例:
"width": 800, "height": 600
min_width
和 min_height
- 类型: 数字
- 描述: 设置窗口的最小宽度和高度。
- 示例:
"min_width": 400, "min_height": 300
max_width
和 max_height
- 类型: 数字
- 描述: 设置窗口的最大宽度和高度。
- 示例:
"max_width": 1200, "max_height": 900
position
- 类型: 字符串
- 描述: 窗口的初始位置,可以设置为
center
(居中)或自定义坐标。 - 示例:
"position": "center"
toolbar
- 类型: 布尔值
- 描述: 是否显示工具栏(默认为
false
)。 - 示例:
"toolbar": false
frame
- 类型: 布尔值
- 描述: 是否显示窗口边框(默认为
true
)。 - 示例:
"frame": true
resizable
- 类型: 布尔值
- 描述: 是否允许用户调整窗口大小(默认为
true
)。 - 示例:
"resizable": true
transparent
- 类型: 布尔值
- 描述: 是否启用透明背景(需要配合 CSS 使用)。
- 示例:
"transparent": false
show_in_taskbar
- 类型: 布尔值
- 描述: 是否在任务栏显示窗口(默认为
true
)。 - 示例:
"show_in_taskbar": true
icon
- 类型: 字符串
- 描述: 窗口图标的路径。
- 示例:
"icon": "assets/icon.ico"
3. Node.js 配置
nodejs
- 类型: 布尔值
- 描述: 是否启用 Node.js 环境(默认为
false
)。 - 示例:
"nodejs": true
node-remote
- 类型: 字符串或数组
- 描述: 指定哪些 URL 不加载 Node.js 环境(适用于第三方网站)。
- 示例:
"node-remote": ["http://example.com", "https://*.github.com"]
4. Chromium 参数
chromium-args
- 类型: 字符串
- 描述: 传递给 Chromium 的命令行参数。
- 常用参数:
--disable-web-security
: 禁用同源策略。--incognito
: 以隐身模式运行。--start-maximized
: 窗口最大化启动。
- 示例:
"chromium-args": "--disable-web-security --start-maximized"
5. WebKit 配置
webkit
- 类型: 对象
- 描述: 配置 WebKit 的行为。
plugin
- 类型: 布尔值
- 描述: 是否启用插件支持(如 Flash)。
- 示例:
"webkit": { "plugin": false }
page-cache
- 类型: 布尔值
- 描述: 是否启用页面缓存。
- 示例:
"webkit": { "page-cache": true }
6. 其他配置
single-instance
- 类型: 布尔值
- 描述: 是否允许多个实例运行(默认为
false
)。 - 示例:
"single-instance": true
webkit-settings
- 类型: 对象
- 描述: 配置 WebKit 的高级设置。
- 示例:
"webkit-settings": { "javascript-can-open-windows-automatically": true, "default_font_size": 16, "default_fixed_font_size": 13 }
问题1:为什么窗口右上角没有全屏按钮?
回答:因为你在package.json里面指定了宽高,请把width删掉试试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效