node app 打包工具pkg的具体使用


Posted in Javascript onJanuary 17, 2019

node 打包可执行文件的工具有很多。node-packer 是国人写的,但一年前就停止更新了。而 nexe 一到fetching prebuilt binary 就报错,放弃了,最终选择了 pkg。

这个项目很神奇,直接将node.js项目打包成windows可以直接执行的exe文件(也支持FreeBSD、linux、macos、arm系统),甚至不需要安装Node.js,且无须修改你项目中的任何代码!

命令行打包

pkg -t node10-macos-x64 index.js

package.json 配置

如果不想每次都输入这么多参数,则需要在 packge.json 文件增加一个 bin 和 pkg 选项:

```
"pkg": {
"scripts": [], // 不需要 striped 的 js 文件
"targets": [ // 打包选项,格式为:node版本-平台类型 mac 或 windows-架构
 "node10-win-x64",
 "node10-macos-x64"
],
"output": "proxy" // 可执行文件名,比如 proxy-win.exe 或 proxy-macos
},
"bin": "index.js" // app 的启动文件
```

然后,你只需要用 pkg . 就可以了。

注:pkg 最多只支持到 node 10 版本。node 11 还暂不支持。

Assets

有一些文件,它不是 js 文件,也没有在代码中 require 过,比如 html 和 css 文件。pkg 就无能为力了。如果想将这些文件也打包到可执行文件中,将它们放到 pakcage.json 的 pkg 的 assets 数组中就可以了,比如:

"assets": [ // 需要被打包的资源文件(即没有在代码中被 require 过的文件)
 "index.html"
],

动态加载的文件

有一些文件,你不想打包进去,比如一些配置文件、json 文件,可以在 require 时指定绝对路径,比如 data 目录下的 users.json 文件:

const users = require(path.join(process.execPath,'../data/users.json'))

然后在打包后,将在可执行文件的同级目录下新建 data 目录,再将 users.json 文件拷贝到 data 目录即可。

这样,以在运行时改变 app 的一些参数。

注意,修改 users.json 文件内容后,需要重启可执行文件才能生效。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
JavaScript中的Screen屏幕对象
Jan 16 Javascript
FF IE兼容性的修改小结
Sep 02 Javascript
ExtJS Window 最小化的一种方法
Nov 18 Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
JavaScript反弹动画效果的实现代码
Jul 13 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 #Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 #Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 #Javascript
vue权限管理系统的实现代码
Jan 17 #Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 #Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 #Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 #Javascript
You might like
PHP初学者头疼问题总结
2006/10/09 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
js获取域名的方法
2015/01/27 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
vue实现微信分享功能
2018/11/28 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
python基于opencv 实现图像时钟
2021/01/04 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
Linux机考试题
2015/07/17 面试题
优秀社区干部事迹材料
2014/02/03 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
追悼会答谢词
2015/01/05 职场文书
借钱欠条怎么写
2015/07/03 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书