PHP 在我心中占据着特殊的位置。它是我的第一份工作,我记得我在家里花了无数个小时做一些小项目。我非常想用 PHP 创建桌面应用程序,但我从来没有做到过。
现在,感谢 NativePHP,我可以了。 NativePHP 追随 Slack、Discord 和 Trello 等流行应用程序的脚步,将您的 PHP 应用程序包装在 Electro 中。它允许后端逻辑在 PHP 上运行,而 UI 则使用 HTML、CSS 和任何 JavaScript 框架构建。
使用 NativePHP 设置场景
我决定通过将 Laravel 应用程序转换为桌面应用程序来深入研究 NativePHP。为了让你更清楚地了解,让我们从一个基本的设置开始。我正在开发的应用程序有一个 Laravel 后端和一个 React 前端,以 MySQL 数据库作为其骨干。
安装 NativePHP
首先,我们通过 Composer 安装 NativePHP:
$ composer require nativephp/electron
这扩展了 Laravel 的 artisan 工具,增加了一组新的 NativePHP 特定命令,例如 php artisan native
显示了构建和管理本地应用程序的命令列表。
接下来,运行 php artisan native:install
来设置基本结构。
特别值得注意的是两个文件:
config/nativephp.php
用于应用程序配置app/Providers/NativeAppServiceProvider.php
用于启动序列和注册本机组件。
运行开发构建
应用程序设置完毕后,我们可以开始开发构建:
$ php artisan native:serve &
$ npm run dev &
我们需要启动 PHP 和 UI 的开发服务器,在本例中, npm 使用 Vite 来构建并为 Electron 窗口提供 UI 组件。
NativePHP 将应用程序与 Electron 捆绑在一起,嵌入了 PHP 解释器。在开发过程中,它将后端切换到本地 SQLite 数据库,因此我们需要使用 php artisan native:migrate
运行迁移来设置新数据库。
添加本地特性
为了增强桌面体验,NativePHP 允许集成本地元素,如通知、菜单栏和热键。
我通过编辑 app/Providers/NativeAppServiceProvider.php
在应用启动时添加了一个简单的通知,这有助于我们给应用带来我们想要的原生感觉。
首先,我们添加通知界面:
use Native\Laravel\Facades\Notification;
然后,在 boot
函数中,在窗口打开后添加以下代码:
Notification::title('Application Started')
->message('This message is comming from NativePHP running on Electron')
->show();
}
保存后,热重载功能应该会重启应用并显示通知(如果看不到通知,请检查是否没有启用 Electron 的通知)。
构建发布
对于生产版本,我们在 config/nativephp.php
中填写发布细节。值得注意的是,环境文件 ( .env
) 被绑定到构建中,因此敏感数据必须使用 cleanup_env_keys
进行清理。
要为你的操作系统构建一个版本,只需运行:
$ php artisan native:build
这个过程生成各种包,包括 DMG、Zip 文件和应用程序的二进制文件。
我们还可以使用以下命令构建 Windows 和 Linux 包:
$ php artisan native:build win
$ php artisan native:build linux
在构建过程完成后,我们应该得到一个 setup.exe
、AppImage 和 .deb
文件。
NativePHP 的注意事项
在深入了解 NativePHP 之前,需要考虑以下几点:
- Alpha 阶段: 目前,NativePHP 处于 alpha 阶段,更倾向于 beta 体验。
- Laravel 框架优先:虽然 NativePHP 声称与任何 PHP 框架兼容,但其设计是为 Laravel 量身定制的。
- 数据库限制: 数据库支持仅限于本地 SQLite,创建时会替换现有的数据库设置。
- 交叉编译限制:虽然它支持针对不同操作系统的构建,但还不支持跨架构的构建。例如,在 M1 芯片上构建的二进制文件无法在大多数 Linux 和 Windows 机器上运行(ARM 构建无法在 Intel 芯片上运行)。一个变通方法是使用不同的机器或 CI/CD 管道进行构建。
结论
NativePHP,即使在 alpha 阶段,对于 PHP 开发者来说,也是一个令人印象深刻且用户友好的框架。它为基于 PHP 的桌面应用程序打开了一个新的可能性世界。如果你正在从事 PHP 开发,NativePHP 绝对是一个值得关注的项目。