百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

给你的Nodejs后端项目打个包(nodejs编写后端接口)

ztj100 2025-03-24 01:40 4 浏览 0 评论

前阵子, 碰到个问题

用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)


打包完成, 试运行

打包完成, 你大概会看到这样的大文件

试运行一下



小结

打包基本上就是下图这么个过程

整个过程自己实操一遍

总的来说还是比较简单的




这期就酱, 下期再见

复杂的问题简单化

每次只关注一个知识点, 我是代码大叔

对技术有兴趣的小伙伴可以关注我, 我经常分享各种奇奇怪怪的技术知识

一起学习, 一起进步

相关推荐

Whoosh,纯python编写轻量级搜索工具

引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

如何用Python实现二分搜索算法(python二分法查找代码)

如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

路径扫描 -- dirsearch(路径查找器怎么使用)

外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

从零开始学习 Python!2《进阶知识》 Python进阶之路

欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

一、背景介绍...

Python之txt数据预定替换word预定义定位标记生成word报告(四)

续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

假期苦短,我用Python!这有个自动回复拜年信息的小程序

...

Python——字符串和正则表达式中的反斜杠('\')问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

Python re模块:正则表达式综合指南

Python...

Python中re模块详解(rem python)

在《...

python之re模块(python re模块sub)

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

Zabbix监控系统系列之六:监控 mysql

zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

mysql系列之一文详解Navicat工具的使用(二)

本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

取消回复欢迎 发表评论: