内网 monorepo 配置指南(PNPM、YARN)

news2024/11/19 4:58:33

此处的内网是指没办法连接互联网进行依赖下载的环境,本文以windows平台为例

背景说明

绝大部分政府机关、国有企业都是在内网开发,无法从互联网同步依赖,就需要另辟蹊径解决项目依赖的问题。

传统的单包项目还好,从互联网机器将依赖下载,打包拷贝到内网就能直接跑起来。

monorepo 项目相对而言复杂一些,下面我将介绍工作中用到的内网 monorepo 方案。

何为 monorepo

Monorepo 是一种项目代码管理方式,指单个仓库中管理多个项目,有助于简化代码共享、版本控制、构建和部署等方面的复杂性,并提供更好的可重用性和协作性。Monorepo 提倡了开放、透明、共享的组织文化,这种方法已经被很多大型公司广泛使用,如 Google、Facebook 和 Microsoft 等。

上面的文案摘自带你了解更全面的 Monorepo - 优劣、踩坑、选型有详细介绍 😀。

基于 YARN

yarn workspaces 是 yarn 提供的 monorepo 的依赖管理机制,从 1.0 开始默认支持,用于在代码仓库的根目录下管理多个package的依赖,详见:yarn workspaces

基本配置

{
  "private":"true", //必填,否则不能开启工作区功能
  "workspaces": [
    "packages/*",   //告知 yarn 在 packages 下的文件夹均为包
  ],
  "scripts": {
    "webpack": "yarn workspace ui-webpack serve",
    "vite": "yarn workspace ui-vite serve"
  }
}

packages 下新建包,并配置 package.json (可以用 yarn init -y 快速初始化, name 属性必填)。整体目录如下图所示:

在这里插入图片描述

此时可以执行 yarn workspaces info 查看工作区结构

# yarn workspaces info
yarn workspaces v1.22.19
{
  "@app-meta/basic-vue3": {
    "location": "packages/basic-vue3",
  },
  "ui-vite": {
    "location": "packages/ui-vite",
    "workspaceDependencies": [
      "@app-meta/basic-vue3"
    ]
  },
  "ui-webpack": {
    "location": "packages/ui-webpack",
    "workspaceDependencies": [
      "@app-meta/basic-vue3"
    ]
  }
}

安装依赖

直接执行yarn即可完成依赖(统一存放在 node_modules 下)。

此时观察子包的目录,发现都有创建 node_modules\.bin 目录,里面是用到的命令行(如 webpackvite),可删除(不影响命令执行)。

启动项目

  • yarn workspace ui-webpack serve

迁移到内网

将整个工程目录node_modules拷贝到新机器即可,简单快捷。

创建目录联接

此时 node_modules 下的依赖没有联接需要手动创建

  1. 删除 node_modules/@app-meta 目录
  2. 执行 mkdir ./node_modules/@app-meta && mklink /J .\node_modules\@app-meta\basic-vue3 .\packages\basic-vue3
  3. 其他的联接类似

基于 PNPM

关于配置

# .npmrc
# 我尝试了各种配置,结果发现如下配置最能打
shamefully-hoist=true

新建包

  1. CTRL+C、CTRL+V 新建一个包,并修改 package.json 的包名
  2. 此时发现 node_modules 内的依赖都是空的,若此时执行 pnpm i --offline 会报错
 ERR_PNPM_NO_OFFLINE_META  Failed to resolve xxxxx
  1. 我们更新下 pnpm-lock.yaml 文件的引用即可

在这里插入图片描述

迁移到内网

由于 pnpm 使用的是软链接,直接拷贝工程目录在新机器不能正常跑起来 🤣(如有更好的方案烦请告之哈)

  1. store-dir目录(可通过pnpm config get store-dir命令查看)拷贝到内网机器
  2. 在新机器上设置 store-dir
  3. 在工程目录下执行 pnpm i --offline
  4. OK

这里不得提一下,此方案如果遇到多人协作开发,则需要在各个机器上重复操作,碰到依赖版本更新会很难受😢。

问题汇总

  1. vite 启动正常,运行时报错

场景
将联网机器中的项目(带依赖)拷贝到内网,webpack能正常使用,vite 启动正常运行时去提示以下错误

Uncaught SyntaxError: The requested module '/@fs/.../node_modules/highlight.js/lib/core.js?v=bdf51948' does not provide an export named 'default' (at core.js?v=bdf51948:2:8)

此时需要重新执行pnpm i --offline

  1. pnpm-lock.yaml 文件

此文件被删除后,执行pnpm i --offline会报下面的错

 ERR_PNPM_NO_OFFLINE_META  Failed to resolve vue-loader@>=15.9.7 <16.0.0-0 in package mirror...

基于 Rush.js(微软出品)

Rush makes life easier for JavaScript developers who build and publish many NPM packages at once. If you’re looking to consolidate all your projects into a single repo, you came to the right place! Rush is a fast, professional solution for managing this scenario.

我还没试验过(在内网安装 rush 都不容易哈哈),有兴趣的同学可以尝试下,这里有参考文章:基于Rush.js的Monorepo实战。

总结

这里局限地介绍了我用过的 monorepo 内网管理办法,我个人推荐yarn方案,简单便捷且对更新依赖友好,希望对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兼顾降本与增效,我们对存算分离的设计与思考

“降本增效”是最近企业常被提及的关键字&#xff0c;作为新时代企业发展的数据大脑&#xff0c;企业大数据团队需要持续探索如何在有限资源下创造更多价值。本文将以场景为"引"&#xff0c;技术为"核"&#xff0c;介绍如何基于 StarRocks 全新的存算分离架…

软考软件设计师真题与答案解析

1、2020下半年基础知识&#xff08;上午题&#xff09; 1、某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令&#xff0c;各类指令的CPI(执行每条指令所需要的时钟周期数)及指令比例如’下表所示。执行该应用程序时的平均CPI为&#xff08; &#xff09;&#xff1b;运算…

2023 操作系统 R 复习大纲( 适用于软件 21 级)

目录 01.操作系统的定义 02.操作系统的基本类型及特征 1.批处理操作系统&#xff08;单、多道&#xff09; 2.分时操作系统 3.实时操作系统 03.操作系统的功能及特征 04.进程的定义、特征 05.进程基本状态及其转换原因 06.进程互斥、同步 07.进程控制块的内容、作用 …

Android Studio开发之路 (一)开发环境搭建以及问题记录

一、安装 Android Studio 安装配置教程 这个文章讲的很全面&#xff08;包括了jdk的配置&#xff09;&#xff0c;我安装了1.8.0版本的JDK 以及 2022.2.1版本的Android Studio ,安装目录都是自定义的&#xff0c;安装完成之后的目录如下&#xff08;项目目录也放到这里了&…

医院上线“报告中心”,实现报告查询“四个更好”

为进一步提升患者的就诊体验&#xff0c;不少医院部署云影像后&#xff0c;再次上线博为软件报告中心信息系统&#xff0c;患者和家属动动手指就能在自己手机上随时随地看到检查检验报告&#xff0c;彻底告别传统的纸质报告单方式&#xff0c;实现检查检验数据永久保存。 博为…

【Java多线程编程】wait与notify方法详解

前言 我们知道&#xff0c;线程的调度是无序的&#xff0c;但有些情况要求线程的执行是有序的。因此&#xff0c;我们可以使用 wait() 方法来使线程执行有序。 本期讲解 Java 多线程中 synchronized 锁配套使用的 wait 方法、notify方法和notifyAll方法&#xff0c;以及 wait 方…

jQuery 操作 DOM 及 CSS

jQuery 操作 DOM 及 CSS 1. jQuery 修改|获取页面元素文本及属性值 text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容&#xff08;包括 HTML 标签&#xff09; val() - 设置或返回表单字段的值 attr() - 方法用于获取属性值。 1.1 举例&#xff…

win11亮度条消失解决方法之一

一、前言 1、本人电脑情况&#xff1a;联想小新Pro16&#xff0c;win11家庭版 2、联想技术工程师三种方式联系方式&#xff08;需提供电脑背后的编号&#xff09;&#xff1a; 1&#xff09; 通过预装的联想电脑管家&#xff0c;获取在线人工专家支持&#xff08;管家链接 h…

【ETH】以太网----PHY芯片LAN8720A----电路原理图

一、LAN8720A----简介 LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片&#xff0c;I/0 引脚电压符合EEE802.3-2005 标准&#xff0c;支持通过 RMI 接口与以太网 MAC 层通信&#xff0c;内置 10-BASE-T/100BASE-TX 全双工传输模块&#xff0c;支持 10Mbps 和 100Mbps。 LAN87…

SpringMVC的请求与响应(请求映射路径、请求参数、日期类型参数传递 、响应json数据)

文章目录 1&#xff0c;PostMan工具的使用1.1 PostMan简介1.2 PostMan安装1.3 PostMan使用1.3.1 创建WorkSpace工作空间1.3.2 发送请求1.3.3 保存当前请求 2&#xff0c;请求与响应2.1 设置请求映射路径2.1.1 环境准备2.1.2 问题分析2.1.3 设置映射路径步骤1:修改Controller步骤…

Java基础面试题突击系列2

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获*365天…

以ChatGPT写诗为例,教你如何用AI软件创新性提问?

想用AI软件创作出动人的诗篇吗&#xff1f; ChatGPT 是一款人工智能软件&#xff0c;可以帮助你创作鼓舞人心的诗歌。它为您提供了一个强大的平台来探索您的创意方面。通过一组简单的问题&#xff0c;您只需点击几下就可以生成令人惊叹的诗歌。 要想让机器写诗&#xff0c;你…

低代码开发——进最热的赛道,啃最硬的骨头

你开足马力提了一串需求&#xff0c;需要招聘IOS和Android工程师、前端测试&#xff0c;PM等人员共同完成&#xff1b;这意味着开发者坐下来一行一行的敲击&#xff0c;并不断测试修改直到上线。 这个过程短则半年&#xff0c;长则数年&#xff0c;才会给到你一个满意的产品。…

基于 Web 的作物生长监控系统的

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本毕业设计在对 A 基地进行调研的基础上。设计并开发了一套基于 Web 的作物生长监控系统&#xff0c;该系统由软件和硬件两部分组成。硬件部分采用了已开发好的多点温湿度采集系统&#xff0c;软件部分采用 Java 开发语言、HT…

回应小伙伴们的咨询,5款好用的小软件

最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧时间整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.RSS阅读器——Tabby Tabby是一款简洁美观的RSS阅读器。它可以自动抓取并订阅你喜欢的博客和网站更新。这个工具拥有简洁的界面和强大的功能,可以过滤和分…

零信任---ZTN

零信任是一种以身份为中心的新一代网络安全防护理念&#xff0c;通过持续的身份认证、环境状态采集、持续信任评估、动态访问控制&#xff0c;并遵循最小权限原则&#xff0c;实现在不可信网络中构筑可信的访问通道。 传统场景中&#xff0c;企业的安全都是在以防火墙为边界的。…

WhatsApp Business 多人使用终极指南

今时今日&#xff0c;几乎每个人的手机上都安装了 WhatsApp&#xff0c;不少电商更会依赖 WhatsApp作为和客户沟通的主要渠道。但对有一定规模的店铺来说&#xff0c;WhatsApp绑定一个号码和设备的设定实在很不方便。如何才能用WhatsApp Business批量处理客户查询呢&#xff1f…

Linux下安装MySQL8

一、安装MySQL8 1、下载 官网&#xff1a;https://dev.mysql.com/downloads/mysql/ 服务器wget下载 cd /data wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle 2、解压 tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar 3、…

十进制转二进制/八进制/十六进制

首先&#xff0c;我们有一个十进制的数字**(21)D**&#xff0c;其他博主都是用除法来算&#xff0c;如果数字小还能适用&#xff0c;如果数字大&#xff0c;就不适用了 以下是我的方法&#xff1a; 十进制转二进制&#xff1a; 通过上图我们可以得到(21)D的二进制为(10101)B&…

【C++】STL——容器适配器 stack和queue 深度剖析及模拟实现

文章目录 1. stack的介绍及使用1.1 stack的介绍1.2 stack的使用 2. stack的模拟实现2.1 适配器模式的了解2.2 结构2.3 成员函数 3. queue的介绍及使用3.1 queue的介绍3.2 queue的使用 4. queue的模拟实现5. STL标准库中stack和queue的底层结构6. deque的简单介绍(了解)6.1 dequ…