Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用pkg将Node.js文件打包成exe文件 #210

Open
TieMuZhen opened this issue May 21, 2022 · 0 comments
Open

使用pkg将Node.js文件打包成exe文件 #210

TieMuZhen opened this issue May 21, 2022 · 0 comments
Labels

Comments

@TieMuZhen
Copy link
Owner

TieMuZhen commented May 21, 2022

需求

当你开发了一个NodeJS程序,想要分发给其他人运行的时候,你会发现,你往往需要对方也来安装一个NodeJS环境。理想的方式是,我们可以把我们的程序打包成一个可执行文件,这样,就可以直接在对方的电脑上运行你的程序了;同时,我们将代码打成二进制形式,可以在一定程度上保护源代码以及API等处理的逻辑。

那么,能不能解决这样的需求呢?可以的。有很多程序包可以做到这件事情:pkgnexenode-packerenclosencc,当然,对于使用web开发的程序,你还可以使用electron来开发,除了打包本身,还提供了GUI能力。

如果只是命令行的跨平台,不妨试试pkg,它可以在某一个平台下将你的NodeJS程序打包进一个可执行程序,并且可以在单一平台,打出主流的WindowsMacLinux下的运行程序。

使用场景

  • 立即为其他平台制作可执行文件(交叉编译)
  • 制作某种自解压存档或安装程序
  • 无需安装Node.js和npm来运行打包的应用程序
  • 无需下载无数个文件npm install来部署您的应用程序。将其部署为单个文件
  • 将您的资产放在可执行文件中,使其更具可移植性
  • 针对新的Node.js版本测试您的应用程序而不安装它

使用

在使用之前,请安装好所有相关依赖。如果我们想打包index.js文件,则执行pkg index.js。默认地,pkg会选择下载最新的NodeJS源码,并编译三个主流的平台,以笔者这里的情况是:node12-linux-x64, node12-macos-x64, node12-win-x64
image
每一次打包,pkg会尝试从本地缓存优先寻找NodeJS的缓存包,如果本地没有找到,就会去远程获取。

404 Not Found问题

点击.exe,发现有些接口返回404 Not Found
例如下例,将exe放到其他文件下,尝试打开页面,发现报Can't get /

app.use('/', express.static('dist'));

复制代码因为pkg没有把这些文件给打包进去,他只会打包使用require或者 通过绝对路径__filename__dirname的文件
所以需要修改为

app.use('/', express.static(path.join(__dirname, 'dist')));

打包Koa

具体操作流程和遇到问题解决方案请参考此文

@TieMuZhen TieMuZhen added the node label May 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant