pkg学习--使用pkg打包应用

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, --config     package.json or any json file with top-level config
    --options        bake v8 options into executable to run with them on
    -o, --output     output file name or template for several files
    --out-path       path to save output one or more executables
    -d, --debug      show more information during packaging process [off]
    -b, --build      don't download prebuilt base binaries, build them
    --public         speed up and disclose the sources of top-level project

  Examples:

  – 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静态服务器,使你能够在本地访问你的网站(部署到线上也是类似)
pkgdemo的目录
service.js代码示例:

//service.js
const 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().address
    var port = server.address().port
    console.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:

package修改内容
然后在项目目录下执行

pkg -t win package.json

完成后即生成一个exe文件,双击启动即相当于执行node service.js,然后你浏览器里(http://localhost:8081/)就能访问打包好的项目了!
见下图:
这是打包出来的exe文件
双击打开这个exe文件,会出现如下界面:
成功运行的服务

然后就可以根据自己的项目需求进行编码了,这是pkg打包…

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值