1

如何将Node.js项目打包为一个可执行文件

PKG
  • pkg可将Node.js项目打包为一个单独的可执行文件,可在未安装Nodejs的机器上运行。支持win、linux等多系统。
  • pkg的打包原理简单来说,就是将js代码以及相关的资源文件打包到可执行文件中,然后劫持fs里面的一些函数,使它能够读到可执行文件中的代码和资源文件。
用法

pkg使用比较简单,执行下pkg -h就可以基本了解用法,基本语法是:pkg [options] <input>

<input>可以通过三种方式指定:

1.一个脚本文件,例如pkg index.js;
2.package.json,例如pkg package.json,这时会使用package.json中的bin字段作为入口文件;
3.一个目录,例如pkg .,这时会寻找指定目录下的package.json文件,然后在找bin字段作为入口文件。

[options]中可以指定打包的参数:
1.-t指定打包的目标平台和Node版本,如-t node6-win-x64,node6-linux-x64,node6-macos-x64可以同时打包3个平台的可执行程序;
2.-o指定输出可执行文件的名称,但如果用-t指定了多个目标,那么就要用--out-path指定输出的目录;
3.-c指定一个JSON配置文件,用来指定需要额外打包脚本和资源文件,通常使用package.json配置。

使用:

在package.json中的pkg字段中指定打包参数,使用npm scripts来执行打包过程,例如:

{
...
"scripts": {
"build": "pkg index.js"
}
}

关于项目中的配置文件处理,如环境变量等。因为这些配置文件会跟着不同的部署环境进行更改,所以为了方便更改,一般不希望把配置文件打包到exe。为了避免pkg自动地将配置文件打包到exe中,代码中不要采用__dirname, 而是采用相对于process.cwd()的方法读取:

// 不推荐
const config = require((path.join(__dirname, './config.js'))
 
// 推荐
const config = require(path.join(process.cwd(), './config.js'));

坚果面包
21 声望0 粉丝