模拟钉钉!我将Vue项目打包成客户端,万物皆可打包!

简介: 模拟钉钉!我将Vue项目打包成客户端,万物皆可打包!


Web项目封装为PC客户端,其中一种方式就是运用 node-webkit

node-webkit 是一个基于node.js和 chromium的应用程序运行环境,通过它我们可以把建立在chrome浏览器和node.js上的web应用打包成桌面应用,也就是我们所说的客户端,而且还支持跨平台。

 

 

一、基础打包过程

 

0.整理思路

相信有很多公司,用习惯老式的ERP系统,将软件UI固化为WINDOWS桌面端的应用程序。

你将一个Element项目摆在他的面前,他看不惯!

他想让你的Web项目封装为一个客户端

是的,你没听错!我们的目的,就是将Web项目封装成一个客户端!


如何实现呢?

我难道重新开发一个OA客户端吗?

我难道废寝忘食一个月,专研学习C++吗?

我的思路肯定是写一个容器,内嵌H5网页!聪明的你明白了吗?

据说钉钉就是这么做的!


首先,你需要有一个正式上线的项目,能在外网或内网被访问,我这以我的CSDN主页为例!

其次,写一个空白的H5界面,加一个跳转到你项目网址的JS

最后,将这个H5文件,通过 nodewebkit 封装为一个客户端!

Vue项目,打包后其实也是H5文件,可以一概而论!

 

1. 下载 nodewebkit

进入https://nwjs.io/ ,下载后得到 nwjs-v0.54.0-win-x64.zip 文件,解压到指定的文件夹

当然它是开源的,你可以到Github中下载它的源码:https://github.com/nwjs/nw.js

1.1:下载

nodewebkit 官网

1.2解压

 

2.新建一个 package.json 文件

1. {
2.  /**指定程序的起始页面。*/
3.  "main": "index.html",
4.  /**字符串必须是小写字母或者数字,可以包含.或者_或者-不允许带空格。name必须全局唯一。*/
5.  "name": "OA系统",
6. }

 

3.新建一个index.html 文件

1. <!DOCTYPE html>
2. <html>
3. <head>
4. </head>
5. <body>
6. <script language="javascript" type="text/javascript">
7. // 以下方式直接跳转
8. window.location.href='https://blog.csdn.net/qq_41464123';
9. </script>
10. </body>
11. </html>

 

4. 打包zip压缩文件后,将后缀名改为nw

改完后缀名后如下图所示:

 

5.打包文件

将2.nw复制到 第一步的文件夹内,使用cmd打开第一步的目录

执行命令:

copy /b nw.exe+2.nw app.exe

该行命令的意思,就是将两个EXE文件合并为一个EXE文件

命令执行后,当前目录下生成 app.exe 文件

双击打开后的效果:

 

6.发布客户端

如果直接将 app.exe 复制到其他目录,是无法运行的。

因为 app.exe 有很多需要的依赖文件,比如目录下的各类dll文件。

要将此客户端正式使用,需要将整个目录一起打包带走,作为客户端的安装目录。

如果需要打包为单EXE文件,可以使用 Enigma Virtual Box软件实现,多文件目前为止杀毒软件不报毒,打包为单文件之后,杀毒软件会报毒,所以笔者未进行单文件优化,欢迎补充!


原文CSDN链接:https://zwz99.blog.csdn.net/article/details/118110654


 

二、Vue项目的打包

 

2.0 思路解析

聪明的读者已经发现,

我都已经把CSDN主页都封装为客户端了,Vue项目还不是了如指掌?

将Vue项目封装为客户端的问题,可以拆解为以下两步:

1.将Vue项目部署到Nginx上,放在服务器,生成一个网址

2.将网址套用在之前H5文件的跳转路径中,完成!

第二步,在之前已经详细说明,所以,我们来尝试如何将Vue发布到服务器上!

 

2.1 Nginx是什么

Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

就像Tomcat完美支持运行Java项目一样,Nginx可以完美支持Vue项目,他们就是一对CP!

我们可以到 http://nginx.org/en/download.html 下载Nginx的最新版本,下载后解压。

其中,conf文件夹下有一个关键的配置文件 —— nginx.conf

这个文件里可以配置Vue项目的运行端口、SSL证书、反向代理、负载均衡等等。

具体代码会在最后给出!

html文件夹下,就是放Vue打包后的dist内的文件,完美兼容!

log文件夹下方一些运行的日志,如果发现跑不起来,可以看看错在哪


PS:所谓正向代理,就是代理服务器代替你访问服务器,如国外网址,运用代理服务器,可以大大加快访问速度,可以理解为像VPN这样的东西,你知道你访问的是什么,但国外网站只知道代理服务器在访问他,不知道真正访问的人。

所谓反向代理,就是代理服务器代替服务器访问你,你不需要只要请求代理服务器,他会根据你的请求,帮你转发到相应的服务器。目标服务器知道是你在访问,但你不知道你到底访问了哪台服务器!

 

2.2 Vue项目部署

将Vue打包文件放到html文件夹下后,就可以启动Nginx了!

cmd进入Nginx的目录,运行命令即可!

1. 验证配置是否正确: nginx  -t
2. 启动Nginx:start  nginx
3. 强制停止Nginx:nginx -s stop
4. 正常停止Nginx:nginx -s quit
5. 修改重Nginx:nginx -s reload

 

2.3 上线验证

如果部署的是云服务器,需要注意是否开启端口外网访问,如阿里云默认除8080端口外禁止外网访问,腾讯云则无此限制。

如被限制,需要登入相应的控制台设置。

打开浏览器,确保项目可以被访问,最后将该网址套用在之前的H5文件内,即可完成客户端封装!

 


三、附录

 

package.json完整代码

1. {
2.  /**指定程序的起始页面。*/
3.  "main": "index.html",
4.  /**字符串必须是小写字母或者数字,可以包含.或者_或者-不允许带空格。name必须全局唯一。*/
5.  "name": "OA",
6.  /**程序描述*/
7.  "description": "OA办公系统",
8.  /**程序版本号*/
9.  "version": "1.0.0",
10.   /**关键字*/
11.   "keywords": ["demo","node-webkit"],
12.   /**bool值,如果设置为false,将禁用webkit的node支持。*/
13.   "nodejs": true,
14.   /**
15.   * 指定一个node.js文件,当程序启动时,该文件会被运行,启动时间要早于node-webkit加载html的时间。
16.   * 它在node上下文中运行,可以用它来实现类似后台线程的功能。
17.   * (不需要可注释不用)
18.   */
19.   //"node-main": "js/node.js",
20.   /**
21.   * bool值。默认情况下,如果将node-webkit程序打包发布,那么只能启动一个该应用的实例。
22.   * 如果你希望允许同时启动多个实例,将该值设置为false。
23.   */
24.   "single-instance": true,
25.   /**窗口属性设置 */
26.   "window": {
27.     /**字符串,设置默认title。*/
28.     "title": "OA",
29.     /**窗口的icon。*/
30.     "icon": "img/tubiao.ico.png",
31.     /**bool值。是否显示导航栏。*/
32.     "toolbar": false,
33.     /**bool值。是否允许调整窗口大小。*/
34.     "resizable": true,
35.     /**是否全屏*/
36.     "fullscreen": false,
37.     /**是否在win任务栏显示图标*/
38.     "show_in_taskbar": false,
39.     /**bool值。如果设置为false,程序将无边框显示。*/
40.     "frame": true,
41.     /**字符串。窗口打开时的位置,可以设置为“null”、“center”或者“mouse”。*/
42.     "position": "center",
43.     /**主窗口的的宽度。*/
44.     "width": 1920,
45.     /**主窗口的的高度。*/
46.     "height": 1080,
47.     /**窗口的最小宽度。*/
48.     "min_width": 400,
49.     /**窗口的最小高度。*/
50.     "min_height": 335,
51.     /**窗口显示的最大宽度,可不设。
52.     "max_width": 800,*/
53.     /**窗口显示的最大高度,可不设。
54.     "max_height": 670,*/
55.     /**bool值,如果设置为false,启动时窗口不可见。*/
56.     "show": true,
57.     /**是否在任务栏显示图标。*/
58.     "show_in_taskbar":true,
59.     /**
60.      * bool值。是否使用kiosk模式。如果使用kiosk模式,
61.      * 应用程序将全屏显示,并且阻止用户离开应用。
62.      * */
63.     "kiosk": false
64.   },
65.   /**webkit设置*/
66.   "webkit": {
67.     /**bool值,是否加载插件,如flash,默认值为false。*/
68.     "plugin": true,
69.     /**bool值,是否加载Java applets,默认为false。*/
70.     "java": false,
71.     /**bool值,是否启用页面缓存,默认为false。*/
72.     "page-cache": false
73.   }
74. }

Nginx conf配置文件模板代码

1. 
2. #worker角色的工作进程的个数 设置为CPU逻辑数量的两倍
3. worker_processes  16;
4. 
5. events {
6.     #每一个worker进程能并发处理(发起)的最大连接数
7.     worker_connections  65535;
8. }
9. 
10. 
11. http {
12.     #开启高效文件传输模式
13.     sendfile        on;
14.     #长连接超时时间,单位是秒
15.     keepalive_timeout  65;
16.     #用于指定响应客户端的超时时间
17.     send_timeout  30;
18.     #允许客户端请求的最大单文件字节数。
19.     client_max_body_size 100m;
20.     #缓冲区代理缓冲用户端请求的最大字节数
21.     client_body_buffer_size 128k;
22.     #导入外部配置文件 文件扩展名与文件类型映射表
23.     include       mime.types;
24.     #让浏览器认为响应是普通的文件流,并提示用户下载文件 如 图片 pdf等
25.     default_type  application/octet-stream;
26.     charset   utf-8;
27.     tcp_nopush     on;
28. 
29.     gzip on;
30.     #压缩最小文件阀值
31.     gzip_min_length 1k;
32.     #缓冲区大小
33.     gzip_buffers 4 16k;
34.     #http协议版本
35.     gzip_http_version 1.0;
36.     #IE版本1-6不支持gzip压缩,关闭
37.     gzip_disable 'MSIE[1-6].';
38.     #压缩级别
39.     gzip_comp_level 6;
40.     #需要压缩的文件格式
41.     gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif;
42.     #告知客户端能否缓存
43.     gzip_vary on;
44.     #反向代理时使用
45.     gzip_proxied off;
46. 
47.     #负载均衡
48.     upstream zwz {
49.         server 127.0.0.1:13145 weight=1;
50.     }
51. 
52.     server {
53.         listen       8080 ssl;
54.         server_name  localhost;
55.         # server_name  xxxxxx.com;
56.         client_max_body_size 100m;
57.         # 设置解决大json返回不完整问题
58.         proxy_buffers 16 1024k;
59.         proxy_buffer_size 1024k;
60.         #保留代理之前的真实客户端ip
61.         proxy_set_header X-Real-IP $remote_addr; 
62.         #在多级代理的情况下,记录每次代理之前的客户端真实ip
63.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
64. 
65.         ssl on;
66. 
67.         ssl_certificate   ssl/4798969_xxxxxx.com.pem;
68.         ssl_certificate_key  ssl/4798969_xxxxxx.com.key;
69.         ssl_session_timeout 5m;
70.         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
71.         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
72.         ssl_prefer_server_ciphers on;
73.         charset utf-8;
74. 
75. 
76.         location / {
77.             root   html;
78.             index  index.html index.htm;
79.             add_header 'Access-Control-Allow-Origin' '*';
80.         }
81.         location /xboot {
82.             #反向代理
83.             proxy_pass  http://zwz;
84.         }
85. 
86.         error_page 404 /404.html;
87.     }
88. }


目录
打赏
0
0
0
0
399
分享
相关文章
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
196 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
42 0
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
这篇文章介绍了如何使用vue-cli 2和3版本来创建Vue项目,并详细说明了两者之间的主要区别。
241 5
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
494 2
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
169 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
260 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
192 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
204 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
297 4
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
274 12

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问