前端架构: 脚手架包管理工具之lerna的全流程开发教程

企业级前端脚手架架构设计与实战指南 本文深入探讨企业级前端脚手架的架构设计与实战应用,通过自动化、标准化和数据化三大核心价值提升开发效率。详细解析分层架构设计(内核层、功能层、适配层)及性能优化技巧,涵盖依赖安装加速、模板生成优化等实用方案,并分享团队协作规范与常见问题解决方案,助力开发者构建高效前端开发工具链。 阅读详情

Lerna


1 )文档

2 )使用

  • 现在我们开始使用 Lerna, 首先创建目录 lerna
  • 安装并查看 lerna 版本 $ npx lerna -v 这里没有安装,会自动安装 lerna
  • 目前lerna的版本是8.1.2
  • 在 lerna 这个目录下执行 $ npx lerna init
  • 这时候,项目初始化完成了,就会多处一个 lerna.json 这个是lerna配置文件
  • 现在基于 lerna 创建 a包 $ npx lerna create a 一路回车
  • 现在出现了 packages/a 包,里面有一系列配置
  • 同workspace使用一致,在使用a的时候,把a加到分组中, 修改 a/package.json中的name
  • "name":"@somegroup/lerna-a", 并且把 a/lib/a.js 修改成 a/lib/index.js
  • 同步 a/package.json 中 "main": "lib/index.js", 同时修改成ESM的形式 "type":"module"
  • 修改 a/lib/index.js 的代码
    'use strict';
    
    export default function() {
      return 'Hello from a';
    }
    
  • 这样,a包就调试好了, 可以在 lerna/package.json 中看到
    "workspaces": [
      "packages/*"
    ],
    
    • 这里的worksapces 使用了通配符*的方式
  • 不同于 npm的workspace添加依赖的方式,lerna提供的方式是:$ npx lerna add -h
  • 注意,这里 The “add” command was removed by default in v7, and is no longer maintained.
  • 所以,新提供的方式是: https://lerna.js.org/docs/legacy-package-management#replacing-your-usage-of-lerna-add
  • 现在给a包添加chalk依赖: $ npm i chalk -w @somegroup/lerna-a 注意这里a包的name变化了,所以安装方式也要如此
  • 这里,a包就绪之后,就可以着手创建b包了,在创建的时候,可以看下一些辅助参数 $ npx lerna create -h
  • 可以看到常用的有
    --access        When using a scope, set publishConfig.access value                        [可选值: "public", "restricted"] [默认值: public]
    --bin           Package has an executable. Customize with --bin <executableName>          [默认值: <name>]
    --es-module     Initialize a transpiled ES Module                                         [布尔]
    
  • 这样,在创建b包的时候,就可以这样 $ npx lerna create b --access public 回车,注意name配置为:@somegroup/lerna-b
  • 创建 cli 包的时候,就可以这样 $ npx lerna create cli --access public --bin --es-module 回车,注意name配置为:@somegroup/lerna-cli
  • 对于b包
    • 修改 b/lib/b.js 为 b/lib/index.js, 同时修改 b/package.json 中的 "main": "lib/index.js" 和 "type": "module"
      • 注意,这里和 cli包的区别在于生成b包的时候 --es-module 没有添加,所以要手动添加这个 "type": "module"
    • 修改 b/lib/index.js 的内容
      'use strict';
      
      export default function () {
        return 'Hello from b';
      }
      
  • 对于 cli 包
    • 修改 cli/package.json 中的 bin属性为:"bin": { "lerna-cli": "bin/cli.js" }, main属性 "main":"src/cli.js"

    • 修改 cli/bin/cli.js 中

      #!/usr/bin/env node
      
      'use strict';
      
      import cli from '../src/cli.js';
      
      cli().parse(process.argv.slice(2));
      
    • 修改 src/cli.js

      import factory from 'yargs/yargs';
      
      export default function cli(cwd) {
        const parser = factory(null, cwd);
      
        parser.alias('h', 'help');
        parser.alias('v', 'version');
      
        parser.usage(
          "$0",
          "TODO: description",
          yargs => {
            yargs.options({
              // TODO: options
            });
          }
        );
      
        return parser;
      }
      
  • 回到最外层 lerna 目录,尝试连接下:npx lerna link,发现报错
  • 使用 $ npm i -ws 这样,三个包都会在 lerna/node_modules/@somegroup 组中会被同步,这样可以替代之前lerna的link命令
    • npm i -ws 是更新所有 workspaces 中的依赖
  • 现在在 lerna/package.json 中的最外层加上一个 cli 的 scripts
    {
      "scripts": {
        "cli": "lerna-cli"
      }
    }
    
  • 执行 $ npm run cli
  • 这样,cli 包就可以直接在 lerna 目录下执行了, 验证
    • $ npm run cli -v 得到 10.2.3 这里得到的是 npm 的版本
  • 至此,基于 lerna 的脚手架的功能框架完成,目前并没有提供什么实质的功能
  • 现在,要在 cli 包中使用a包和b包,在 lerna 目录下,执行 $ npm i @somegroup/lerna-a @somegroup/lerna-b -w packages/cli
  • 在 lerna/packages/cli/bin/cli.js 中使用
    #!/usr/bin/env node
    
    'use strict';
    
    import cli from '../src/cli.js';
    import a from '@somegroup/lerna-a';
    import b from '@somegroup/lerna-b';
    
    console.log(a());
    console.log(b());
    
    cli().parse(process.argv.slice(2));
    
  • 执行 cli,$ npm run cli 可以看到,打印出了a, b包中的方法提供的字符串

3 )测试

  • 使用 lerna 添加测试脚本 $ npx lerna run test 它会把 packages 目录中所有 test 脚本全部执行
  • 如果要单独测试某个包,比如a包,修改 packages/a/__tests__ 目录下的 a.test.js
    'use strict';
    
    import a from '../lib/index.js';
    import assert from 'assert';
    
    const { strict } = assert;
    
    assert.strictEqual(a(), 'Hello from a');
    console.info('a tests passed');
    
  • 这时候,在 packages/a 下执行 $ npm run test 测试通过
  • 同样,packages/* 下的所有包都可以这样修改后,执行测试用例

4 )发布

  • 发布前的再次检查
    • 每个包的版本都要注意同步检查,发布的时候,不要有错误
    • 发布的配置检查,在 package.json 中 "publishConfig": { "access": "public" } 都要有
    • 提交代码到远程仓库后(必须)
  • 所有事项准备完成,就可以执行发布的流程了,执行 $ npx lerna publish
    • 这里有步骤,可以选择下一个版本,填入必要信息或选项
    • 选择之后,本地packages下包的每个版本都会帮忙升级,非常方便

5 )验证

  • 发布完成后,可以本机全局安装我们的 @somegroup/lerna-cli 工具了
  • $ npm i -g @somegroup/lerna-cli@latest 或者指定版本号
  • 再执行 $ lerna-cli 就可以运行我们的脚手架了
  • 这样基于lerna开发的脚手架就已经完成了
现代前端工程化-基于 Monorepo 的 lerna 模块(从原理到实战) 技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以领取。 阅读详情

相关推荐

lerna 8.x 详细教程

需要注意的是输入package name时,不能直接输入core,因为这个包会被作为单独的npm包发布,core同名的包肯定会存在的。我们可以群组的形式创建,最终包名就是@lerna-demo/core,类似@vue/cli、@vue/composition-api。

https://shixuebin.gitee.io/hexo-blog/ 442

Lerna入门与实战

下面是使用lerna的完整工作流程图。

xiangzhihong8的专栏 4760

手把手移植st7701s驱动:MT6763+安卓8.0屏幕适配保姆级教程

本文详细介绍了在MT6763平台上移植ST7701S驱动的完整流程,涵盖从LK层到Kernel层的适配方案,特别针对安卓8.0系统的特殊要求。通过MIPI转RGB屏幕适配的实战教程,帮助开发者解决常见显示问题,包括无显示、色彩异常和屏幕错位等,并提供高级调试技巧如彩条测试模式和闪屏解决方案。

weixin_29186249的博客 158

多工程管理方式 - lerna的使用

一、lerna是干什么用的 为什么叫lerna? lerna是希腊神兽九头蛇Lernaean Hydra的前几个字母,也间接形象的描述了多包管理的功能 简单来说:它优化了使用Git和NPM管理多包存储库的工作流,用来管理多个npm项目,处理每个项目相互之前引用关系,以及每个项目的发布管理。 一个lerna项目的结构大致如下: my-lerna-repo/ package.json packages/ package-1/ package.json packa..

qq_36943808的博客 6233

医学影像弹性形变处理

这段代码的主要流程是:读取 DICOM 医学影像,尝试使用 MONAI 进行弹性形变(根据版本适配),如果失败则使用 OpenCV 实现,最后可视化并保存处理结果。这样可以在不同环境下灵活处理医学影像的弹性形变需求。后面会写一篇解释弹性变形方法的短文。

wh_xia_jun的专栏 780

日志异常检测详细整理,看这一篇就够了(附各项目代码链接)

对于不用的日志键,用它们的参数值向量训练一个参数值异常检测模型来检测有这些参数值反映的系统性能异常。与标准的GAN框架一样,D和G的参数是基于D的输出来更新的,因此鉴别器D可以被训练为尽可能敏感地将正确的标签分配给真实和虚假序列,而生成器将被训练为尽可能聪明地在经过足够多轮的迭代后欺骗鉴别器,即误导D将真实标签分配给虚假序列。LR:逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

qq_20368489的博客 1万+

前端架构: 脚手架之包管理工具的案例对比及workspaces特性的使用与发布过程

vue-cli 这个脚手架使用 Lerna 管理,它的项目显得非常清晰,在 vue-cli 中包含很多 package 点开进去,每一个包都有package.json,它里面有很多项目,再没有 Lerna 之前去维护和管理这么多包是会非常困难的,而 webpack 至今还没有用任何的包管理工具,在其 lib 下会有非常多的模块,而且它还自己写了很多脚本来进行管理各种功能

Wang的专栏 2226

第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛技术解析与实战指南

本文深入解析了第二十届全国大学生智能车竞赛-地瓜机器人智慧医疗挑战赛的核心技术。内容涵盖从零搭建数字孪生环境、实现AI视觉任务(二维码识别、引导线追踪、目标检测)、在边缘设备部署轻量化大模型进行图生文描述,到遥操作与自主控制的平滑切换,并提供了基于ROS2的系统集成与赛场实战指南,助力参赛者高效备赛。

weixin_29252171的博客 2779

前端架构: 脚手架之多package项目管理和架构

通常来说,当一个项目变大了以后,我们就要对这个项目进行拆分,在前端当中,对于项目进行拆分的方式,通常把它称之为javascript包管理,需要使用一个工具叫做 npm (Node Package Management),它是使用nodeJS来对包进行一个管理,用了这个包管理以后,项目就可以以大化小,把一个复杂的项目拆分成若干个小的项目,如何把一个大的项目进行一个拆分

Wang的专栏 1865

Windows下MMdetection3D保姆级安装指南(含CUDA和PyTorch版本避坑)

本文提供Windows平台下MMdetection3D的完整安装指南,重点解决CUDA与PyTorch版本匹配问题。从环境准备到关键组件安装,详细介绍了CUDA Toolkit选择策略、PyTorch精准安装步骤,以及MM系列组件的安装顺序和常见错误解决方案,帮助用户顺利完成3D目标检测环境的配置。

weixin_42628941的博客 493

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 208

前端架构师实战一:从零搭建 Lerna 多包仓库与脚手架 core 内核

bin 入口 → root 降级 → 入参解析 → 环境检查 → 版本自检 → 命令注册,并通过--debug看到了 verbose 级日志逐层流动,验证了更新检查真的连上了华为云 registry(发现最新版 1.1.6,说明该包确实发布过、检查逻辑真实可用)。Lerna 8 与 npm workspaces 的组合,让多包之间用符号链接互相引用,开发时改动即生效;npm link后imooc-cli成为全局命令,任何目录下都可调用。整套内核最大的价值是"可插拔":后续每增加一个业务命令,只需要在。

cpyaxjq的博客 607

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3722

React + Storybook + Lerna 构建自己的前端UI组件库

前言 本文意在帮助读者快速搭建自己的前端UI组件库,构建-打包-发布,帮你解决大型web前端应用中组件重用的问题. React 自2014年以来,react不断地发展壮大,时至今日已经发展成为最受欢迎的前端框架,如果你还不太了解react,请看这里。 Storybook storybook是一套UI组件的开发环境,它允许你浏览组件库,查看每个组件的不同状态,以及交互式开发和测试组件。 storyb...

weixin_34310369的博客 2387

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4207

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Turborepo & father & pnpm & lerna 搭建前端组件库经验分享

使用turborepo & father & pnpm & lerna 搭建前端组件库,基于father4提供monorepo方案,提高前端组件库打包速度相关经验分享

luoluoyang23的博客 3824

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Node.js 脚手架开发详解:从原理到实战

本文介绍了Node.js脚手架开发的完整流程和关键技术点。脚手架作为快速生成项目基础结构的工具,能够标准化项目结构、提升开发效率并降低技术门槛。文章详细讲解了脚手架的工作原理,包括命令行交互、模板下载和渲染等核心流程。在技术实现上,重点介绍了Commander(命令行参数解析)、Inquirer(交互式界面)、download-git-repo(模板下载)等核心模块的使用方法,并提供了完整的脚手架实例代码。此外,文章还探讨了高级特性如Monorepo管理、单可执行应用打包、用户体验优化等最佳实践,以及版本管

油墨香^-^的博客 889

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Lerna 运行流程剖析

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构...

u012384510的博客 660

Web前端架构师 | 更新至34周

Web前端架构师 | 更新至34周

软希网分享源码的博客 1077

前端工程化-打造企业通用脚手架

本文字数:10930字预计阅读时间:28分钟前端工程化-打造企业通用脚手架目录前言脚手架是什么?脚手架能力为什么不用自动化构建工具脚手架核心价值使用脚手架@focus/cli架构依赖项概览focus create projectName核心流程· 核心代码实现· 小结focus add material核心流程· 核心代码实现· 小结通用能力总结前言随着前端工程化的概念越来越深入FEer心,前端...

frontend_frank的博客 261

10款必备NocoBase开发工具链推荐:从代码编辑到自动化测试的完整指南

NocoBase是一款极易扩展的无代码/低代码开发平台,专为构建内部工具设计。本文将推荐10款从代码编辑到自动化测试的必备开发工具链,帮助开发者高效构建和扩展NocoBase项目,提升开发效率和质量。 ## 一、代码编辑工具:提升开发效率的利器 ✏️ ### VSCode:NocoBase开发的首选编辑器 VSCode凭借其丰富的插件生态和强大的代码提示功能,成为NocoBase开发的理想选择

gitblog_00830的博客 1056

基于 Lerna 管理 packages 的 Monorepo 项目最佳实践

本文首发于 vivo互联网技术 微信公众号 mp.weixin.qq.com/s/NlOn7er0i…作者:孔垂亮对于维护过多个package的同学来说,都会遇到一个选择题,这些package是放在一个仓库里维护还是放在多个仓库里单独维护,本文通过一个示例讲述了如何基于Lerna管理多个package,并和其它工具整合,打造高效、完美的工作流,最终形成一个最佳实践背景最近在工作中接触到一个项目,这...

weixin_30699443的博客 2446

refine项目结构解析:Monorepo架构的最佳实践

在现代前端开发中,随着项目规模扩大和团队协作加深,传统多仓库(Multi-repo)架构面临依赖管理复杂、代码复用困难、版本同步混乱等挑战。Monorepo(单体仓库)架构通过将多个相关项目或模块集中管理,有效解决了这些问题,已成为大型前端项目的主流选择。本文以React企业级框架refine为例,深入剖析其Monorepo架构设计与实践,为前端团队提供可复用的架构经验。 refine作为一个专...

gitblog_00834的博客 1147

前端劝退预警:JavaScript 工具链不完全指南

经过这么多年的发展,JavaScript 早已经不是当年那个不太起眼的脚本语言。如今的 JavaScript 可以说是风光无限,在 Web 前端、移动端、服务端甚至物联网设备上都大展身手,到处都有它的身影。 在 JavaScript 语言日渐强大的同时,与其配套的开发工具也蓬勃发展。现在的 Web 前端项目,早已不是写几个 HTML 页面,加点 CSS 和 JS 就完事了。随便一个实用的项目,可...

kaysonli的博客 352

X-BUILD项目结构解析:理解大型Vue3应用的最佳组织方式

X-BUILD是基于Vite2 + Vue3 + TypeScript构建的前端脚手架,为大型Vue3应用提供了清晰高效的项目组织方式。本文将深入解析X-BUILD的项目结构,帮助开发者快速掌握其架构设计与最佳实践。 ## 一、项目整体架构概览 X-BUILD采用了模块化的设计思想,将项目划分为多个核心目录,每个目录承担特定的功能职责。这种结构设计不仅便于代码管理和维护,还能显著提升团队协作效

gitblog_00966的博客 355
上一篇: 前端架构: 脚手架之包管理工具的案例对比及workspaces特性的使用与发布过程
下一篇: 前端架构: 脚手架通用框架封装之入口文件开发(教程一)
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值