在上一篇的使用nodejs 客户端js文件,讲到了bytenode打包有限数量的js文件转为字节码。针对我们经常用到的Express框架,如何打包呢?
1.gulp
使用gulp,合并和压缩js、css、html等,一方面,在运行过程中,减少网络传输数据量,另外,也可以初步保护自己的劳动成果,但将整个express工程部署到私有环境中,通常是客户环境,使用Webstorm,即可再次编辑工程,不是很放心。
2.PKG
通过不断的baidu和bing,针对nodejs打包的工具有不少,总体是将js转换为字节码,思前想后,选定了PKG。环境如下:WebStorm 2020.1.1+ Nodejs(V12.16.1 zip版本),最好使用nodejs zip版本,因为pkg打包node环境,可以实现多版本nodejs在同一环境下运行,这点比较强!!
1)安装pkg,即 npm install -g pkg;
安装过程中出现问题,请更新npm
2)下载运行模板,需要和nodejs及系统类型,一一匹配
https://github.com/zeit/pkg-fetch/releases
Nodejs:fetched-v12.16.1-win-x64、fetched-v12.16.1-linux-x64
相关软件下载地址
链接:https://pan.baidu.com/s/1r-V7--SRytlLPC_-9SZ5fA
提取码:wxxo
3)配置本地运行模板,运行pkg -t win package.json
会在本地 C:\Users\用户XXX\.pkg-cache\v2.6 文件中,出现downloading的文件,网速会非常慢,容易中断,所以提前下载,并改成上述两个名称,删除掉正在下载的文件。再次运行pkg -t win package.json。若需要对应的离线文件,联系本人。
如果在工程根目录下能生成exe文件,即执行成功。
问题又出现了,整个工程目录,里面有些是配置文件,如果都打包到exe文件中,就无法修改了,尤其是配置化的软件,必须有修改配置文件的地方。要解决此问题,就需要结合自身代码工程编写情况了。
可以参考https://jingsam.github.io/2018/03/02/pkg.html,在package.json中配置。
3.以下几点,是本人亲测:
1)只打包了文件夹,在package.json配置打包
在代码中,使用 app.use(express.static(path.join(__dirname, 'public')));只打包了文件夹,即文件内容丢失,需要在
"assets": ["public/**/*"]配置,即可以打包静态资源。Views资源使用这种方式,实现整体打包。
2)不打包文件夹,使用外部文件夹
在代码中,使用 app.use(express.static('public'));不打包文件夹,即在exe同级目录,存放public文件夹及内容,exe实现外部资源访问。
3)常用的配置文件,使用外部文件夹
在读取配置文件部分,直接使用相对路径读取,pkg在打包过程中,识别为字符串,并非路径,所以不会打包相应的资源,正好使用外部文件夹的方式访问,注意保持与exe的目录相对位置关系。
4.exe图标修改
pkg生成的exe文件自带图标为node的默认图标,来自于fetched-v12.16.1-win-x64,其实fetched-v12.16.1-win-x64是一个可执行空白的应用程序,下载resource_hacker (http://www.angusj.com/resourcehacker/),打开.pkg-cache\v2.6\fetched-v12.16.1-win-x64,将里面的ico修改为自己的ico,注意需要多个尺寸。

5.保存exe,模板中的应用图标随之改变,后期pkg打包生成的exe图标即为设定的图标。至此结束。
6.通过pkg -t linux package.json生成的linux运行包,直接在linux环境下运行,如果报权限不够,修改当前用户具有该文件的读写权限,完成后,正常运行。

本文介绍了如何使用PKG工具将基于Node.js和Express的工程打包成可执行文件,包括安装PKG、配置模板、解决配置文件和资源访问问题,以及修改EXE图标的方法。在打包过程中,需要注意只打包必要文件,允许外部访问静态资源和配置文件,以确保软件的可维护性和适应性。
1869

被折叠的 条评论
为什么被折叠?



