问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将node程序打包成一个dockerfile

发布网友 发布时间:2022-04-22 20:35

我来回答

2个回答

懂视网 时间:2022-04-23 00:57

下面我就为大家分享一篇基于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静态服务器,使你能够在本地访问你的网站(部署到线上也是类似)

//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,给老板演示很方便有木有!

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

使用vue + less如何实现简单换肤功能

使用angular、react和vue如何实现相同的面试题组件

利用jQuery实现滚动到底部时自动加载

在Angular2.0中如何实现modal对话框

在JS中如何实现运动缓冲效果(详细教程)

热心网友 时间:2022-04-22 22:05

下载镜像,安装环境
我们先执行如下命令,启动虚拟机:
$ boot2docker start
2014/08/18 21:22:41 Waiting for VM to be started...
...........
2014/08/18 21:23:21 Started.
2014/08/18 21:23:21 Docker client does not run on Windows for now. Please use
2014/08/18 21:23:21 "boot2docker" ssh
2014/08/18 21:23:21 to SSH into the VM instead.

如果我们的物理机内存低于4G,那么跑这个boot2docker可能需要手动设置内存占用大小:
$ boot2docker start -m=512

我们利用命令就可以进入linux虚拟机了
$ boot2docker ssh
boot2docker: 1.1.2
master : 740106c - Thu Jul 24 03:24:10 UTC 2014

执行 docker 命令,会有一个命令列表,里面列出了所有 docker 支持的功能,列表如下:
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
... ...

下面会对一些常用的命令进行示例说明,我们可以通过如下命令,先查找centos的镜像,并把他下载下来
$ docker search centos #查找centos名字的镜像
$ docker pull centos #下载官方纯净版本的centos镜像

在调用search命令时,你会看到有好多centos包,他们都是这样的<username>/<image_name>,这些不在根目录的镜像都是非官方的,是其他用户提交到docker hub上去的,耐心等待片刻我们就可以将centos的镜像拉下来了。
如果脸黑,镜像又不幸被墙,那么试试加上下面的hosts:
54.234.135.251 get.docker.io
54.234.135.251 cdn-registry-1.docker.io

成功下载好centos镜像之后,我们可以利用如下命令来查看镜像列表:
$ docker images
REPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZE
centos centos6 b1bd49907d55 2 weeks ago
212.5 MB
centos centos7 b157b77b1a65 2 weeks ago
243.7 MB
centos latest b157b77b1a65 2 weeks ago
243.7 MB

接下来我们就利用centos7这个镜像输出一段 hello world
$ docker run b15 /bin/echo 'Hello world'
Hello world

注意这里的 b15,他表示centos7这个images的id,不用全部打全,只要保证输入的id前几位能找到唯一镜像即可,这点很赞。
稍微复杂一点的例子:
$ docker run -i -d -t b15 /bin/sh -c "while true; do echo hello world; sleep 1; done"

-i表示同步container的stdin,-t表示同步container的输出,-d表示deamon,以后台启动这个container,执行这个container是永远不会停止的,每一秒钟都会输出hello world。
至于什么是container,container和image的关系我们下一段再说,列出镜像的历史:
$docker history image_name
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
会声会影如何裁剪视频画面范围 怎么正确喝酒的方法 真正好的饮用方式 日本清酒獭祭正确喝法 深圳有几家酒店可以真正意义上说是五星级? 深圳富苑皇冠假日套房式酒店酒店周边 深圳富苑皇冠假日套房酒店酒店简介 深圳富苑皇冠假日套房式酒店酒店介绍 金福人生多倍保重疾险怎么样?值不值得买? wpsword文档怎么删除空白页面 wPS删除空白页方法wps怎么删除多余空白页最有效方法 手机屏幕遇冷就闪屏,玩会儿受热以后就不闪屏了,这是怎么回事儿,我那位大神给说一下这是什么情况? 供应 冷却塔 密闭式是什么? 云南鑫亿付科技有限公司怎么样? 深圳悦鑫亿贸易有限公司怎么样? 深圳市鑫亿标数码科技有限公司怎么样? 个体户营业执照办下来了然后办什么 玉米饭怎么吃 苞谷米饭做法 苞谷米饭怎么做好吃又简单 苞谷米饭最正宗的做法 玉米饭怎么做才好吃呢 广东话不知道怎么说 粤语不知道怎么说? 在linux下怎么打包直接运行的node 小米mix4和小米11pro哪个玩王者荣耀好 大佬们好,我想问一下,华为畅想7是没有语音唤醒功能的是吗? 支付宝怎么不能语音助手 中国人百年来思想有什么改变 为什么说北京奥运会是我们中国人百年的梦 吓唬了外国人百年之久的中国人,是外国人自己杜撰出来的人? 闵家镇三合村村委会收垃圾处理费合理合规吗? 只有自己才是自己的镜子。拿别人做自己的镜子,天才也许会照成傻瓜。什么意思 只有自己才是自己的镜子,拿别人做自己的镜子,天才也许会照成傻瓜是什么 只有自己才是自己的镜子。拿别人做自己的镜子,天才也许会照镜子是什么意思? 社保买多久生小孩才有得报销 在深圳社保要缴费多久,生小孩才可以报销 不知道知道名称怎么加好友 社保生孩子需要交满多少月才能有的报销啊 如何通过微信昵称找到? 窗户不隔音怎么办 如何通过微信昵称找到? 微信名称怎么加好友? 为什么会声会影编辑视频没有声音? 会声会影只能添加图片而不能编辑? 会声会影怎样剪辑 用会声会影编辑视频的问题??? 会声会影剪辑时为什么这么卡 如何用会声会影编辑sdv拍摄的视频 会声会影怎么编辑才不卡 服装店的营销策略? nodejs pkg是什么文件