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 相关文章推荐
常用简易JavaScript函数
Apr 09 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
浅谈js基本数据类型和typeof
Aug 09 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
关于Vue单页面骨架屏实践记录
Dec 13 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
微信小程序实现下拉框功能
Jul 16 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 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入门学习知识点三 PHP上传
2011/07/14 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
JS中操作JSON总结
2020/12/06 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
Python实现类继承实例
2014/07/04 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
捐助倡议书
2015/01/19 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
php png失真的原因及解决办法
2021/10/24 PHP
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers