基于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 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
Apr 01 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
用JS生成UUID的方法实例
Mar 30 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
vue-devtools的安装步骤
Apr 23 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
javascript实现用户必须勾选协议实例讲解
Mar 24 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
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
PyTorch预训练的实现
2019/09/18 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
error和exception有什么区别
2012/10/02 面试题
卫生巾广告词
2014/03/18 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
三严三实学习心得体会
2014/10/13 职场文书
营业员岗位职责范本
2015/04/14 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
javascript函数式编程基础
2021/09/15 Javascript