前端项目离线打包方案

各位大佬早上好、中午好、晚上好

在现代前端开发中,项目通常通过包管理工具(如npm、yarn或pnpm)来管理第三方依赖。这些工具通过执行npm install xxxyarn add xxxpnpm add xxx等命令,从npm仓库下载所需的包及其依赖项,并将其安装到项目的node_modules目录中。

需求场景

在某些特殊环境下(如企业内网、保密项目或网络受限场景),我们需要实现前端项目的离线打包能力,确保在没有互联网连接的情况下也能完成项目的构建和部署。

开发流程分析

标准的前端项目开发流程通常包含以下步骤:

  1. 项目拉取

通过git clone <项目地址> 命令将项目代码克隆到本地

  1. 依赖安装

执行npm install(或yarn/pnpm等效命令),该命令会:

a. 读取项目package.json文件

b. 解析所有直接依赖和间接依赖

c. 从npm仓库下载所有依赖包

d. 将依赖安装到node_modules目录

  1. 项目启动

执行npm run start命令,此时构建工具(如webpack、vite等)会在开发环境下进行打包,这一过程通常不需要网络连接。

构建阶段分析

执行npm run build命令时,构建工具会:

● 读取项目源代码和node_modules中的依赖

● 进行代码转换、打包和优化

● 生成最终的生产环境构建产物

关键点:构建过程本身不需要网络连接,只要确保node_modules中包含所有必需的依赖即可。

离线环境解决方案

方案一:预先下载所有依赖

  1. 在有网络的环境中:

a. 执行npm install下载完整依赖

b. 将整个node_modules目录备份或归档

  1. 在离线环境中:

a. 恢复node_modules目录到项目根目录

b. 执行构建命令

当项目需要新增第三方库时(例如需要安装quill富文本编辑器),可采用以下方法:

  1. 在有网络的环境中:

a. 执行npm install quill下载该库及其依赖

b. 将新增的依赖从node_modules中提取出来

c. 通过移动存储设备将这些依赖拷贝到离线环境

d. 将新增依赖手动放入项目的node_modules目录

e. 更新package.json和package-lock.json(或yarn.lock/pnpm-lock.yaml)文件

f. 执行构建命令

  1. 使用npm-pack-all工具

a. 为了将npm库打包成.tgz文件,需要安装npm-pack-all工具

css 复制代码
npm install -g npm-pack-all

b. 下载需要打包的npm库

复制代码
npm install -g quill

这会将 selenium-webdriver 及其依赖项安装到 %userprofile%\AppData\Roaming\npm\node_modules 目录下

c. 生成.tgz文件:进入到上面node_modules/quill下执行npm-pack-all命令,将其依赖项打包,执行完后,您将在当前目录下生成一个以 .tgz 为后缀的压缩文件

d. 将 .tgz 文件复制到离线环境中的项目目录。

e. 在该目录下执行以下命令安装包

bash 复制代码
npm install ./xxx.tgz

这将安装 quill 及其依赖项,而无需访问外部网络.

方案一有很大缺陷就是需要人工手动维护依赖,复杂且易出错。

方案二:使用verdaccio

Verdaccio 是一个轻量级、开源的 私有 npm 代理注册表(npm registry),专为 Node.js 开发者设计,用于搭建企业或团队内部的 npm 包管理仓库。它支持缓存公共 npm 包、托管私有包,并提供灵活的权限控制和存储管理。

核心功能

  1. 私有包托管

a. 允许团队在内部发布、存储和管理私有 npm 包,避免敏感代码泄露到公共 registry。

  1. 公共包缓存

a. 自动缓存从 npm 或其他源(如 Yarn)下载的公共包,加速后续安装并减少对外网依赖。

  1. 多源代理

a. 可配置多个上游 registry(如 npm、淘宝镜像等),根据需求自动切换。

  1. 权限控制

a. 通过插件支持用户认证(如账号密码、HTTPS)、细粒度的包访问权限(读/写/发布)。

  1. 轻量易扩展

a. 基于 Node.js 开发,支持插件化扩展(存储、认证、UI 等),配置文件简单(config.yaml)。

适用场景

● 企业开发:内部共享私有模块,统一管理依赖。

● 离线环境:缓存公共包,确保无外网时仍能正常开发。

● CI/CD 优化:加速构建流程,减少对外部 registry 的请求。

● 安全合规:避免直接依赖不可控的外部源。

快速入门

  1. 安装

通过 npm 或 yarn 全局安装:

csharp 复制代码
npm install -g verdaccio
# 或
yarn global add verdaccio
  1. 启动服务

运行命令后,默认监听 http://localhost:4873:

  1. 配置 npm 客户端

将 npm 或 yarn 的 registry 指向 Verdaccio:

arduino 复制代码
npm set registry http://localhost:4873
  1. 发布私有包

在项目目录下登录并发布:

bash 复制代码
npm login  # 输入 Verdaccio 的账号(默认允许匿名)
npm publish

配置文件

默认配置文件位于 ~/.config/verdaccio/config.yaml,常见配置项:

yaml 复制代码
storage: ./storage      # 包存储目录
auth:
  htpasswd:
    file: ./htpasswd     # 用户密码文件
uplinks:
  npmjs:
    url: https://registry.npmjs.org/  # 上游 registry

实操

  1. 登录到目标服务器xxx

  2. 全局安装 verdaccio

    npm install -g verdaccio

  3. 启动verdaccio

arduino 复制代码
verdaccio --listen 0.0.0.0:4873

Verdaccio 会启动一个 Web 服务器,并在 http://0.0.0.0:4873/ 提供服务。开发人员可以通过配置文件来自定义其行为,例如修改仓库的存储路径、配置用户认证等等。

配置文件地址: ~./verdaccio、config.yaml

  1. 设置yarn或者 npm仓库地址
arduino 复制代码
npm set registry http://0.0.0.0:4873/
yarn config set registry http://0.0.0.0:4873/
  1. 这样,所有的 npm install 和 npm publish 操作都会使用本地的 Verdaccio 仓库。

  2. 删除原来node_modules

  3. git pull

  4. yarn:主要在执行安装的时候请不要关闭启动verdaccio的客户端

  5. yarn build:prod

志哥我想说

第一中方案适合个人开发者或者小公司,无需共享组件库代码的时候,而第二种方式适合小团队

贴一下官网的介绍:

  • 它是基于 Node.js 的网页应用程序
  • 它是私有的 npm 注册中心
  • 它是本地网络代理
  • 它是可插拔的应用程序
  • 它相当容易安装和使用
  • 我们提供 Docker 和 Kubernetes 支持
  • 它与 yarn, npm 和 pnpm 100% 兼容
  • Verdaccio 的意思是 一种在中世纪末意大利流行的壁画的绿色

官网地址:verdaccio.org/zh-CN/

相关推荐
小小小小宇8 分钟前
前端国际化看这一篇就够了
前端
大G哥11 分钟前
PHP标签+注释+html混写+变量
android·开发语言·前端·html·php
whoarethenext13 分钟前
html初识
前端·html
小小小小宇25 分钟前
一个功能相对完善的前端 Emoji
前端
m0_6278275226 分钟前
vue中 vue.config.js反向代理
前端
Java&Develop27 分钟前
onloyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
前端·spring boot·编辑器
白泽talk31 分钟前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师40 分钟前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员
HhhDreamof_44 分钟前
云贝餐饮 最新 V3 独立连锁版 全开源 多端源码 VUE 可二开
前端·vue.js·开源
Simaoya1 小时前
【vue】【element-plus】 el-date-picker使用cell-class-name进行标记,type=year不生效解决方法
前端·javascript·vue.js