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 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.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().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打包应用相关推荐

  1. Python学习之道-打包成exe程序

    Python学习之道-打包成exe程序 一.打包成exe程序 Pyinstaller安装 作用 使用 Pyinstaller相关参数 Pyinstaller使用总结 尽量用from.....impor ...

  2. python学习——外星人入侵程序打包

    python学习--外星人入侵程序打包 1.首先需要安装pyinstaller 打开命令行窗口,输入 pip install pyinstaller 即可安装pyinstaller.(可以在执行上述命 ...

  3. nodejs 学习之 pkg 打包成 可执行性文件

    安装pkg 默认情况下 pkg 不增加配置和参数的情况下,会打包当前nodejs 环境和win,linux,ios 三个平台的可执行文件 npm install -g pkg 设置配置文件 注意:静态 ...

  4. [os]pkg 解包和打包

    pkgutil命令 解包: pkgutil --expand src_pkg target_dir (例如:pkgutil test.pkg test,将当前目录的test.pkg解压到当前目录的te ...

  5. 使用pkg将node项目打包成exe后,EXE文件打开闪退

    发现网上没有相关内容,做一下记录. 项目使用了canvas,闪退的问题就是因为这个,但不清楚为什么会出现问题. 具体情况: 打开exe会闪退,发现没有启动服务,在cmd中打开该exe,发现有一条报错, ...

  6. Webpack 4 学习09(打包生成html)

    所需插件 html-webpack-plugin 本教程基于已经搭建好的webpack环境,详见Webpack 4 学习01(基础配置) **了解html-webpack-plugin** HtmlW ...

  7. Sencha学习笔记2:打包您的第一个Sencha安卓应用apk安装包

    通过上一篇翻译的官方文章的介绍我们对sencha有了初步的印象,同时我们也通过该向导生成了第一个示例应用代码框架,那么下一步可能很多人都觉得应该根据该向导所提示的去看一下一个应用是如何建立起来的详细信 ...

  8. FreeBSD pkg更新源文件-pkg下载速度慢

    系统版本 FreeBSD12.0 1.pkg源文件介绍 /usr/local/etc/pkg.conf 中的REPOS_DIR 指定pkg源文件目录,变量内容如下 默认目录有2个, 系统级仓储文件目录 ...

  9. 【Visual C++】游戏开发五十三 骨骼动画学习资料推荐打包下载

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8865942 作者:毛星云(浅墨 ...

  10. [python学习笔记] pyinstaller打包pyqt5程序无法运行

    问题 pyinstaller打包的pyqt5程序在部分电脑上会失败.用户截图提示下边错误日志 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-ru ...

最新文章

  1. 使用Windbg解析dump文件
  2. sublime text2/3怎样在windows中配置ctags插件
  3. Redis数据库操作指令
  4. mybatis $和#源代码分析
  5. python小数补0,python用零填充小数
  6. 实战篇|风控策略效率的测试、调优与评估
  7. ES6高频面试题目整理
  8. 光物联成物联网新热点
  9. UTC时间与当地时间的转换关系?
  10. hihocoder 1513 小Hi的烦恼——bitset
  11. Android Service完全解析,关于服务你所需知道的一切(下) (转载)
  12. 15款桌面搜索软件横向评测
  13. window上mysql的配置文件_windows系统中,MySQL配置文件my.ini在哪里?
  14. origin做相关性分析图_Origin教程第六章 使用Origin进行数据分析
  15. GrassCutter使用教程
  16. 自动化!windows端自动化抢购茅台python脚本
  17. 16张扑克逻辑思维问题详解
  18. MatlabSimulink中找不到Carsim_s_function的解决办法
  19. js将对象会集合转换为json字符串。Jackson
  20. 笔迹识别(一 笔迹特征)

热门文章

  1. 【写博客常用】Word文档中怎么插入分隔线
  2. 绿盟科技实习安服面经
  3. android开发简历,轻松拿到了阿里Android高级开发工程师的offer
  4. html5 canvas 虚线,HTML5 canvas画带箭头的虚线
  5. 程序员必备:那些实用的Chrome扩展程序
  6. 走楼梯c语言程序,C语言项目爬楼梯的两种实现方法参考
  7. 饥荒dns服务器未响应,DNS服务器未响应怎么办
  8. 5G时代芯片之王——射频芯片
  9. LDR6023E-解决苹果PD 20W快充市场供不应求
  10. 新一配:创建数据透视表时的注意事项【转载】