nodejs pkg打包生成exe,设置自定义图标和产品信息

一、使用node开发应用程序,通常采用express框架进行功能扩展,当系统开发完成后,直接的方式就是采用gulp压缩后,在服务端运行node app.js命令执行,to C的系统这样开发部署没有问题。

二、而在to B,to G的项目中,采用源码的方式运行,一方面部署不太友好,需要拷贝的文件很多,另外,对于代码的保护和产权控制,比较弱。因此需要对nodejs+express工程打包封装。

三、最常用的打包方式是使用pkg,之前的文章有具体介绍,这里不做展开。本篇主要解决采用pkg打包后生成exe安装包,默认的图标是node的绿色六边形,一眼看去就是nodejs的应用程序。通常公司产品化的软件系统,需要标识为公司的logo和版权信息。最早的时候,使用第三方软件,对exe里面ico资源进行修改调整,而随着nodejs版本升级,对应的pkg更新后,修改后的exe无法运行,报错,分析原因,可能是exe内部二进制结构发生了变化,导致无法使用。

四、查阅资料,网上提供了rcedit和resedit两个开源库进行调整,以下介绍具体的流程和遇到的坑。

1)首先,安装resedit

npm install resedit --save

2)在resedit中,type:‘module’,即只支持 module import方式加载,而express工程大部分使用的export+require,需要全面升级才能够使用,即无法和现有的工程直接集成,需要独立运行。

3) 安装完成resedit后,目录切换到resedit中,npm install,确保依赖包都下载完成。

4)在resedit文件夹中,建立build.js文件,代码的写法必须采用module方式,build.js具体内容如下:

import * as PELibrary from 'pe-library';
import * as ResEdit from 'resedit';
import * as fs from 'fs';

const orgFile = "./a.exe";
const distFile = "./b.exe";

let data = fs.readFileSync(orgFile);
let exe = PELibrary.NtExecutable.from(data);
let res = PELibrary.NtExecutableResource.from(exe);

//replace exe icon
let iconFile = ResEdit.Data.IconFile.from(fs.readFileSync('./kxyt.ico'));
ResEdit.Resource.IconGroupEntry.replaceIconsForResource(
    res.entries,
    1,
    1033,
    iconFile.icons.map((item) => item.data)
);

//replace version
const viList = ResEdit.Resource.VersionInfo.fromEntries(res.entries);
const vi = viList[0];
vi.setFileVersion(1, 0, 0, 0, 1033);
vi.setStringValues(
    { lang: 1033, codepage: 1200 },
    {
        ProductName: 'my soft',
        ProductVersion:'v1.0',
        OriginalFilename:'***',
        FileDescription: '**',
        CompanyName:'***',
        LegalCopyright:'版权所有@****有限公司'
    }
);
vi.outputToResourceEntries(res.entries);

res.outputResource(exe);
let newBinary = exe.generate();
fs.writeFileSync(distFile, new Buffer.from(newBinary));

注意:exe原始文件和生成后的文件,使用相对路径或者决定路径,位置不要出错。替换exe的默认图标,使用ico格式图片,位置保持正确。

5)在cmd命令框中,切换到resedit目录,运行 node build.js,在distfile位置,即可以看到生成新的exe,默认图标也发生变化,点击exe属性,在详细信息页面查看exe的相关信息,效果如下。

nodejs pkg打包生成exe,设置自定义图标和产品信息_第1张图片

至此,nodejs 生成的exe,设置自定义图标和版权信息完成。

你可能感兴趣的:(nodejs,arm64,nodejs+express,前端,nodejs,pkg,自定义exe图标)