基于node打包可执行文件工具_Pkg使用心得分享


Posted in Javascript onJanuary 24, 2018

项目地址

基于node打包可执行文件工具_Pkg使用心得分享

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

首先安装pkg

npm install -g pkg

然后在项目目录下执行

pkg entrance.js

即可打包linux,macos,win3个平台的可执行文件。entrance.js为你node项目的入口文件。

如果只想打包windows下的exe,则加上-t参数。win即为打包成windows平台下的exe文件,具体可选参数参见项目目录

pkg -t win entrance.js

稍等片刻后项目目录下就会生成打包好的entrance.exe文件。

pkg会自动从入口文件开始查找依赖的文件并全数打包进去,无须修改项目里的任何代码。

其他

pkg可以根据package.json下的配置进行打包,默认入口文件为bin指向的文件。
执行
pkg .

或是

pkg package.json

即可自动按照package.json的配置打包。

//package.json
{
 //其他配置项
 "bin": "service.js",//入口文件
 "pkg": {
 "scripts": [
  "build/**/*.js"//需要打包进来的其他js文件,可添加多个
 ],
 "assets": [
  "dist/**/*"//静态文件的目录,可添加多个
 ]
 }
}

注意:静态文件需要在项目中将文件的引用换成

path.join(__dirname, 'dist')

的形式,才可以正常打包,否则可能会读取不到。

示例

使用vue-cli建立项目,并使用npm run build将你的项目编译生成静态文件到dist目录下。这些都是vue-cli自带的内容,不再赘述。

在项目目录下新建一个service.js文件,并添加以下代码,在本地起一个express静态服务器,使你能够在本地访问你的网站(部署到线上也是类似)

基于node打包可执行文件工具_Pkg使用心得分享

//service.js
const express = require('express');
const app = express();
const path = require('path');
 
app.use(express.static(path.join(__dirname, 'dist')));//注意这里使用path.join(__dirname, 'dist')而不是'dist',虽然在命令行中执行起来效果是一样的,不过pkg打包会无法识别到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}`)
})

此时你可以在控制台执行

node service.js

来启动你的服务器了,启动完成后,浏览器访问http://localhost:8081/即可查看你的网站。

接下来我们使用将service.js和dist目录打包成一个exe文件,方便他人使用

首先安装pkg

npm install -g pkg

然后修改package.json,添加bin(如果不是service.js的话)和pkg项

{
 //其他配置项
 "bin": "service.js",//指定入口文件
 "pkg": {
 "assets": [
  "dist/**/*"//指定要打包的静态文件目录
 ]
 }
}

然后在项目目录下执行

pkg -t win package.json

完成后即生成一个exe文件,双击启动即相当于执行node service.js,然后你浏览器里(http://localhost:8081/)就能访问打包好的项目了!也不需要提前安装node,给老板演示很方便有木有!

以上这篇基于node打包可执行文件工具_Pkg使用心得分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
论坛特效代码收集(落伍转发-不错)
Dec 02 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
jQuery无缝轮播图代码
Dec 22 Javascript
提高Web性能的前端优化技巧总结
Feb 27 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
详解vue组件通信的三种方式
Jun 30 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
layui实现数据表格自定义数据项
Oct 26 Javascript
Angular整合zTree的示例代码
Jan 24 #Javascript
使用classList来实现两个按钮样式的切换方法
Jan 24 #Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 #Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
Jan 23 #Javascript
简述vue中的config配置
Jan 23 #Javascript
JS实现多物体运动的方法详解
Jan 23 #Javascript
JS运动改变单物体透明度的方法分析
Jan 23 #Javascript
You might like
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
php后退一页表单内容保存实现方法
2012/06/17 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
分分钟入门python语言
2018/03/20 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
大学新闻系自荐书
2014/05/31 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
总结Python连接CS2000的详细步骤
2021/06/23 Python
Python保存并浏览用户的历史记录
2022/04/29 Python
Python 绘制多因子柱状图
2022/05/11 Python