在本教程中,我们将详细介绍如何将Node.js应用程序打包成一个独立的EXE文件。这对于将应用程序发布到没有Node.js环境的计算机上非常有用,或者当你希望创建一个便携式版本时。
## 原理和基本概念
将Node.js应用程序打包成单个EXE文件的基本原理是将Node.js运行时(node.exe),应用程序源代码以及其依赖项打包到一个包含了一个内嵌的文件系统的可执行文件中。
打包过程中,我们将使用一个名为`pkg`的第三方工具。`pkg`将为我们提供一个连同应用程序一起使用的特定的Node.js二进制运行时。
`pkg`的基本工作流程如下:
1. 分析应用程序的源代码以确定其依赖项。
2. 将Node.js二进制文件、源代码及其依赖项编译并打包成一个仅包含一个可执行文件的应用程序。
接下来,让我们开始实际操作。
## 准备工作:创建一个简单的Node.js应用程序
首先,确保你已经安装了Node.js和npm。然后,创建一个简单的Node.js应用程序。假设我们有如下的目录结构:
```
/my-nodejs-app
├── node_modules
├── package.json
└── main.js
```
`main.js`是应用程序的入口点,我们将编写一个简单的HTTP服务器:
```javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Hello, world!');
res.end();
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
```
`package.json`文件中应该包含应用程序的基本信息和依赖关系:
```json
{
"name": "my-nodejs-app",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"start": "node main.js"
},
"dependencies": {}
}
```
现在,应用程序已准备好打包成EXE文件。
## 将Node.js应用程序打包成EXE文件
1. 使用npm安装`pkg`:
```
npm install -g pkg
```
2. 在项目根目录(包含`package.json`的目录)运行如下命令,以将应用程序打包成适用于您的操作系统的EXE文件:
```
pkg .
```
`pkg`支持各种目标(操作系统和架构)的组合。例如,要生成适用于Windows 64位的可执行文件,可以运行:
```
pkg -t node12-win-x64 .
```
更多关于目标的详细信息,请参考[`pkg`的官方文档](https://github.com/vercel/pkg#targets)。
3. 打包完成后,一个名为`my-nodejs-app.exe`的新文件应该出现在项目的根目录中。此可执行文件是独立的,可以在没有Node.js环境的计算机上运行。
```
./my-nodejs-app.exe
```
此时,你已成功将Node.js应用程序打包成一个独立的EXE文件。你可以在不同的计算机上测试这个可执行文件,而不需要安装Node.js。