专栏首页前端自习课【Web技术】259- Lerna包管理

【Web技术】259- Lerna包管理

认识lerna

导读:本章节主要讲解Lerna是什么,Lerna有什么用,如何使用Lerna进行npm包管理,大厂的Lerna版本管理策略是怎么做的,Lerna是如何实现本地包依赖管理以及底层原理是什么? 读者可以带着这些问题去阅读,使学习事半功倍。

一句话理解lerna(面试专用)

A tool for managing JavaScript projects with multiple packages.

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

翻译:Lerna 是一个用来优化托管在git pm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。

关键字:多仓库管理,多包管理,自动管理包依赖,monoRepos

  • lerna管理开发者最关心的几个问题
  • lerna采用的是monorepo模式,它和multrepo有什么区别?
  • lerna是如何实现内部文件软链的?是npm link么?
  • lerna在哪些场景下使用会比较优势?
  • lerna如何安装依赖,如何更新,如何发布?lerna如何提升安装性能?
  • lerna如何指定发布版本,如何指定发布子目录?

一张图讲解大厂lerna的使用策略

导读:我们一般会把一个大型项目才分两大部分:业务模块 + 通用模块。 由于通用模块会被多个业务模块使用,往往是通过NPM包提供服务。lerna很好的管理多个包以及他们的依赖关系。

Lerna核心原理

monorepo 和 multrepo 区别

monorepo:是将所有的模块统一的放在一个主干分支之中管理。

multrepo:将项目分化成为多个模块,并针对每一个模块单独的开辟一个reporsitory来进行管理。

lerna是如何运作的

导读:lerna是如何做到内部模块的软链和管理,对于作者来说是一个很大的困惑?在npm下,npm link可以在系统目录下建立包软链。软链可以不需要发布,就可以使用本地包,很好的提高开发效率。

阅读源码发现lerna实现软链使用了symlink-dependencies包。最终使用fs.symlink函数实现了文件软链。

Lerna配置

lerna 环境搭建
npm i lerna -g        // 全局安装lerna
lerna init            // 初始化lerna目录
lerna.json基础配置
{
  "version": '0.0.1',
  "npmClient": 'cnpm',                      // yarn, npm
  "packages": ['packages/*', 'xx/*'],       // 管理多个目录
  "command": {
    "publish": {                            // lerna publish配置,忽略*.md文件,
      "ignoreChanges": ["*.md"],
      "message": "chore(release): publish"
    },
    "bootstrap": {                          // lerna bootstrap配置,忽略component-*包
      "ignore": "component-*",
      "npmClientArgs": ["--no-package-lock"]
    }
  }
lerna项目目录结构实例

Lerna基本操作

本小节会介绍lerna基本操作命令,如何创建一次lerna的工作流。lerna的常用命令:list, bootstrap, clean, changed, publish。

如何安装依赖
lerna bootstrap
如何查看本地包列表
lerna list
如何删除安装依赖
lerna clean
如何建立软链
lerna link
如何发布安装包
lerna publish

如何创建一次lerna工作流

导读:从lerna boostrap(依赖包安装) —> 开发模块 —> git commit —> lerna changed(查看包变化) —> lerna publish。

lerna bootstrap   // 安装依赖包
lerna list        // 本地依赖包
lerna changed     // 待发布包列表
lerna publish     // 发布

Lerna高阶操作(黑科技)

publish 高级应用

导读:某些发布的情况,开发者需要指定安装包版本,或者指定子目录发布。

lerna publish --dist-tag next   // 指定当前版本号
lerna publish --contents dist   // 指定dist目录为发布目录
bootstrap 性能提升

导读:如果安装包里面有多个基础依赖包,可以使用 —hoist 方式来提升安装性能。

lerna bootstrap --hoist         // 提升到根目录

本文分享自微信公众号 - 前端自习课(FE-study),作者:前端早读课

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【HTML5】296- 重新复习 HTML5 的 5大存储方式

    在 HTML5 规范之前,存储主要是用 cookies 。 cookies 的缺点有:

    pingan8787
  • 【拓展】快速掌握位运算..

    计算机在底层使用的是二进制补码进行运算。对应的二进制位进行操作,计算机只识别0和1 。

    pingan8787
  • 【CSS】205-CSS的“层”峦“叠”翠

    提起,z-index大家脑海里可能会立刻浮现这样的知识点:“z-index的值大小控制元素在Z轴上显示的层级,z-index越大显示的层级越高(也就是在最上层,...

    pingan8787
  • lerna入门指南

    P.S.Lerna是Babel自己日用并开源的工具,见Why is Babel a monorepo?

    ayqy贾杰
  • lerna前端代码管理入门及最佳实践

    在最初开开发package的时候,还属于一种刀耕火种的阶段。没有什么自动化的工具。发布package的时候,都是手动修改版本号。如果packages数量不多还可...

    javascript.shop
  • CTF实战30 CTF题目练习和讲解五

    该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

    用户1631416
  • Python学习 Day 9 property 多重继承 Mixin

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:

    统计学家
  • Tensorflow入门教程(十八)——特征点检测案例

    特征点检测的应用有很多种,比如人脸特征点检测,人体骨架特征点检测,人体运动特征点检测等。今天我就以人脸特征点为例,通过卷积神经网络来实现检测。

    用户7498388
  • 5款整站下载器

    有的人利用整站下载工具下载网站到本地进行慢慢的欣赏,有的人利用全站下载工具创建垃圾站。不管你是出于什么样的目的,下面这些工具软件你可以会需要。

    跟着阿笨一起玩NET
  • 【机器学习笔记】:逻辑回归实战练习(二)

    前几篇介绍了逻辑回归在机器学习中的重要性:5个原因告诉你:为什么在成为数据科学家之前,“逻辑回归”是第一个需要学习的

    用户2769421

扫码关注云+社区

领取腾讯云代金券