给你的Nodejs后端项目打个包(node为基础的后端框架)
ahcoder 2025-05-10 19:24 2 浏览
前阵子, 碰到个问题
用Nodejs做了个小项目需要交付客户使用
之前Nodejs做的都是自用, 所以也没碰到需要打包保护源码之类的问题
上网搜了半天, 找到的大多是针对Vue的前端项目打包/混淆, 例如用Webpack
费了N多时间才找到个针对后端项目的打包方法, 记录如下, 方便自己也方便有同样需求的同行
应用对象: Nodejs后端代码
使用场景: 保护源码/方便部署
适用平台: Linux/Windows/Mac
基础要求: 已有一个最基本的Nodejs后端项目
第一步: 安装pkg模块
pkg能把你的项目直接打包成可执行的文件(支持FreeBSD、linux、macos、arm系统), 甚至不需要你安装Nodejs.
按标准方式安装它
npm install -g pkg
配置package.json, 在原内容基础根位置上添加以下内容
{
"name": "demo" //原始内容
....
"bin": "./app.js", //你项目的总入口文件
"pkg": {
"targets": [ "node14-linux-x64" ], //打包平台, 本例是打包在Linux中运行
"scripts": [ //需要打包进来的其他js文件,可添加多个
"./include/**/*.js",
"./routes/**/*.js",
"./module/*.js",
"./app.js",
],
"assets": [ //静态文件的目录,可添加多个
"./node_modules/**/*",
"./public/**/*",
"./views/**/*"
]
},
...
}
按照上面的注释,依次补充配置信息
注意, 这里配置一定不要错, 如果后面打包后各种运行不了的报错的时候, 回来这里检查一下吧
pkg会根据你配置的入口文件开始查找依赖文件并全部进行打包
开始打包
在命令行(我这里用的是PowerShell)进入项目所在的目录, 用指令打包
注意: 静态文件需要在项目中将文件的引用换成
path.join(__dirname, 'public')
比如
//一般常用写法:
app.use(express.static(__dirname+'/public'));
//打包的话改成这种
app.use(express.static(path.join(__dirname, 'public'))); //注意这里使用path.join(__dirname, 'public')而不是'public',虽然在命令行中执行起来效果是一样的,不过pkg打包会无法识别到public目录
来打包试试
pkg .\package.json
如果你发生像上面这样的警告, 恭喜你, 碰到和我一样的问题
不用紧张, 按提示可以看到微软官方的说明
授权给命令行窗口以执行脚本
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
再次打包
pkg .\package.json
需要消耗一定的时间
技巧:当然你也可直接用-t指定需要打成哪个平台的包:
pkg -t "node14-win-x64,node14-linux-x64" .\package.json
-t 详细可用参数说明
https://github.com/vercel/pkg#targets
比较重要的是生成什么平台的t参数, 作者描述如下
Targets
pkg can generate executables for several target machines at a time. You can specify a comma-separated list of targets via --targets option. A canonical target consists of 3 elements, separated by dashes, for example node12-macos-x64 or node14-linux-arm64:
nodeRange (node8), node10, node12, node14, node16 or latest
platform alpine, linux, linuxstatic, win, macos, (freebsd)
arch x64, arm64, (armv6, armv7)
打包完成, 试运行
打包完成, 你大概会看到这样的大文件
试运行一下
小结
打包基本上就是下图这么个过程
整个过程自己实操一遍
总的来说还是比较简单的
这期就酱, 下期再见
复杂的问题简单化
每次只关注一个知识点, 我是代码大叔
对技术有兴趣的小伙伴可以关注我, 我经常分享各种奇奇怪怪的技术知识
一起学习, 一起进步
相关推荐
- Linux基础运维篇:Linux日志管理(第013课)
-
日志是什么Linux系统中的日志就像是一个记录员,它会把系统中发生的各种事情都记录下来,比如系统什么时候启动了、哪些用户登录了系统、运行了哪些程序、程序有没有出错、硬件有没有问题等等。这些记录对于系...
- 目标取代deb包格式,深度Linux操作系统公布“如意玲珑”项目
-
IT之家7月16日消息,7月13日,在上海站的deepinMeetup如意玲珑专场上,深度操作系统官方正式宣布了项目全新的品牌名称——如意玲珑(Linyaps)。目前如意玲珑已...
- 基于 Linux 快速搭建私有化 Helm Chart 仓库(ChartMuseum 实战指南)
-
一、前言在Kubernetes中,Helm是最流行的包管理工具,用于简化应用部署与管理。如果你希望在内网环境中部署、管理自己的HelmCharts,就需要搭建一个私有化HelmChart...
- Linux环境开发效率--那些强大的命令
-
之前写了一篇关于linux下常用的几个命令,参考Linux入门--提高工作效率的命令。接下来接着介绍一些在linux下做开发经常使用到得命令,其中有打包压缩命令tar,文件查找命令find,文件内容查...
- 怎么使用再生龙打包(备份)liunx系统
-
liunx系统区别于Windows,由于分区格式的特殊性并不能像GHOST那样进行备份封包,有款开源的针对liunx系统备份还原的软件-再生龙(clonezilla),可能有部分人已经用过,本篇文章让...
- python打包那些事儿(python的打包)
-
python是个万金油,什么活都能干,开发一些小应用的时候,要想其他人也方便使用,就需要对程序进行打包生成可执行文件,不再依赖python环境或者其他文件。前几天写了一个视频去水印的小程序,主要依赖f...
- 「项目部署」使用Jenkins一键打包部署SpringBoot应用
-
前言嗨,大家好,我是希留,一个被迫致力于全栈开发的老菜鸟。一般而言,一个项目部署的由:拉取代码->构建->测试->打包->部署等过程组成,如果我们经常需要部署项目,特别是在微服...
- Linux面试最高频的5个基本问题(linux面试题必会题目)
-
CPU利用率和CPU负载的区别是什么提到CPU利用率,就必须理解时间片。什么是CPU时间片?我们现在所使用的Windows、Linux、MacOS都是“多任务操作系统”,就是说他们可以“同时”运行多...
- jtti:如何将Linux服务器的文件系统创建成镜像
-
如何将Linux服务器的文件系统创建成镜像?如何把Linux文件系统创建成一个镜像文件,也就是"系统打包"?这类操作不仅适用于迁移、备份,还能用于批量部署、自定义系统安装,甚至可以作为...
- 用Nuitka打包 Python,效果竟如此惊人!
-
使用Python开发一个程序后,将Python脚本打包成独立可执行文件是一项常见需求。Nuitka是一个Python到C的编译器,它会将Python代码转换为等效的C代码,然后使用标...
- Linux基础运维篇:Linux软件包管理(第014课)
-
什么是软件包管理在Linux系统中,软件包管理就像是一个“软件管家”,负责软件的安装、卸载、更新以及软件之间依赖关系的处理。它把软件及其相关的文件、配置信息等打包在一起,方便用户进行管理和操作。...
- 给你的Nodejs后端项目打个包(node为基础的后端框架)
-
前阵子,碰到个问题用Nodejs做了个小项目需要交付客户使用之前Nodejs做的都是自用,所以也没碰到需要打包保护源码之类的问题上网搜了半天,找到的大多是针对Vue的前端项目打包/混淆,例如用...
- 爆强!直接把 Python 编写的图形程序打包为安卓 APP
-
请大家多多关注点赞哦如果想使用Python语言编写图形界面程序,那么有不少的框架可以提供支持,比如Tkinter、QtforPython、WxPython等等。不过这些框架都是只能创建桌面图...
- 几行代码教你zip打包(打包zip命令)
-
01准备有时我们不想去手动一个个去操作,然后傻等他打包完,python依赖库zipfile很方便地帮助我们封装了解压压缩,shutil用于文件目录处理,方法类似于linux命令。1、安装pipin...
- Linux基础运维篇:Linux文件操作超详细版(第007课)
-
一、Linux文件系统基础1.文件类型Linux一切皆文件,常见文件类型:普通文件(-):文本文件(.txt)、二进制文件(可执行程序)、压缩文件等。目录文件(d):用于组织文件和子目录(类似...
- 一周热门
- 最近发表
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux mac (32)
- linux ip地址 (34)