pkg的学习之旅 ----使用pkg打包Node.js服务小demo
将Node.js打包为可执行文件的工具有pkg、nexe、node-packer、enclose等,面对项目需要,所以在学习pkg,看到相关文章,觉得这个很不错,自己记录下,以便下次使用便捷。
pkg的打包原理简单来说,就是将js代码以及相关的资源文件打包到可执行文件中,然后劫持fs里面的一些函数,使它能够读到可执行文件中的代码和资源文件。例如,原来的require(’./a.js’)会被劫持到一个虚拟目录require(’/snapshot/a.js’)。
安装
npm install pkg --save-dev
使用
pkg使用比较简单,执行下pkg -h
pkg --help
就可以基本了解用法,基本语法是:pkg [options] <input>
会出现下面这些内容:
Options:-h, --help output usage information 帮助输出使用信息-v, --version output pkg version --版本输出包装版本-t, --targets comma-separated list of targets (see examples)-c, --configpackage.json or any json file with top-level config--options bake v8 options into executable to run with them on-o, --outputoutput file name or template for several files--out-path path to save output one or more executables-d, --debugshow more information during packaging process [off]-b, --builddon't download prebuilt base binaries, build them--public speed up and disclose the sources of top-level projectExamples:– Makes executables for Linux, macOS and Windows$ pkg index.js– Takes package.json from cwd and follows 'bin' entry$ pkg .– Makes executable for particular target machine$ pkg -t node6-alpine-x64 index.js– Makes executables for target machines of your choice$ pkg -t node4-linux,node6-linux,node6-win index.js– Bakes '--expose-gc' into executable$ pkg --options expose-gc index.js
-t,–目标逗号分隔的目标列表,指定打包的目标平台和Node版本,如-t node6-win-x64,node6-linux-x64,node6-macos-x64可以同时打包3个平台的可执行程序
-c,–config package.json 或任何具有顶级配置的json文件,指定一个JSON配置文件,用来指定需要额外打包脚本和资源文件,通常使用package.json配置。
–option 将V8选项烘焙到可执行文件中以在其上运行
-o,–指定输出可执行文件的名称,但如果用-t指定了多个目标,那么就要用–out-path指定输出的目录;
----out-path 输出一个或多个可执行文件的输出路径
-d,–debug 在打包过程中显示更多信息[off]
-build 不要下载预构建的基本二进制文件,构建它们。
–public 加速并披露顶级项目的来源
<input>可以通过三种方式指定:1.一个脚本文件,例如pkg index.js;2.package.json,例如pkg package.json,这时会使用package.json中的bin字段作为入口文件;3.一个目录,例如pkg .,这时会寻找指定目录下的package.json文件,然后在找bin字段作为入口文件。
使用pkg的最佳实践是:在package.json中的pkg字段中指定打包参数,使用npm scripts来执行打包过程,
{..."bin": "./bin/www","scripts": {"pkg": "pkg . --out-path=dist/"},"pkg": {"scripts": "build/**/*.js","assets": "views/**/*","targets": [...]},...}
scripts和assets用来配置未打包进可执行文件的脚本和资源文件,文件路径可以使用glob通配符*。
链接,参考实例链接
npm官网
实例:
使用vue-cli建立项目,并使用npm run build将你的项目编译生成静态文件到dist目录下。
在项目目录下新建一个service.js文件,并添加以下代码,在本地起一个express静态服务器,使你能够在本地访问你的网站(部署到线上也是类似)
service.js代码示例:
//service.jsconst express = require('express');const app = express();const path = require('path');app.on('ready',function(){console.log('进入页面了')})//注意这里使用path.join(__dirname, 'dist')而不是'dist'// 虽然在命令行中执行起来效果是一样的,不过pkg打包会无法识别到dist目录app.use(express.static(path.join(__dirname, 'dist')));var server = app.listen(8081, function () {var host = server.address().addressvar port = server.address().portconsole.log(`AIbuy agents server start successfully on http://${host}:${port}`)console.log('打包出来了')})
保存后,就可以输入命令行,来启动服务器了,启动完成后,浏览器访问http://localhost:8081/即可查看本地网站。
node service.js
接下来我们使用将service.js和dist目录打包成一个exe文件,方便他人使用
首先全局安装pkg
npm install pkg -g
然后修改package.json,添加bin(如果不是service.js的话)和pkg项
package.json:
然后在项目目录下执行
pkg -t win package.json
完成后即生成一个exe文件,双击启动即相当于执行node service.js,然后你浏览器里(http://localhost:8081/)就能访问打包好的项目了!
见下图:
双击打开这个exe文件,会出现如下界面:
然后就可以根据自己的项目需求进行编码了,这是pkg打包…
如果觉得《pkg学习--使用pkg打包应用》对你有帮助,请点赞、收藏,并留下你的观点哦!