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 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
用js生产批量批处理执行命令
Jul 28 Javascript
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
Vue关于数据绑定出错解决办法
May 15 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
Jun 10 Javascript
vue使用element-ui按需引入
May 20 Vue.js
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数组操作
2011/12/30 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
在Django框架中编写Context处理器的方法
2015/07/20 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
为什么会有内存对齐
2016/10/10 面试题
工作说明书范文
2014/05/07 职场文书
师范生求职信
2014/06/14 职场文书
高中学校对照检查材料
2014/08/31 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
2015年教师国培感言
2015/08/01 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
python脚本框架webpy的url映射详解
2021/11/20 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
Java设计模式中的命令模式
2022/04/28 Java/Android