lerna管理前端模块实践
最近在工作中使用了
lerna进行前端包的管理,效率提升了很多。所以打算总结一下最近几个月使用 lerna 的一些心得。有那些不足的地方,请包涵。
该篇文章主要包括在使用 lerna 的一些注意事项,和使用过程中与其他工具的整合,最终形成的一个最佳实践。
package 的指的是一个可以通过 npm 包管理工具发布的一种目录结构,翻译过来感觉不太适合,所以就用package 来说明吧。
前端开发 package 面临的问题
在最初开开发 package 的时候,还属于一种刀耕火种的阶段。没有什么自动化的工具。发布 package 的时候,都是手动修改版本号。如果 packages 数量不多还可以接受。但是当数量逐渐增多的时候,且这些 packages 之间还有依赖关系的时候,对开发人员来说,就很痛苦了。工作不仅繁琐,而且需要用掉不少时间。
举个例子,如果你要维护两个package。分别为 module-1, module-2。 下面是这两个 package 的依赖关系。
// module-1 package.json
{
    "name": "module-1",
    "version": "1.0.0",
    "dependencies": {
        "module-2": "^1.0.0"
    }
}
//module-2 package.json
{
"name": "module-2",
"version": "1.0.0",
}
在这样的环境下,module-1 是依赖 module-2 的。如果 module-2 有修改,需要发布。那么你的工作有这些。
- 修改 module-2 版本号,发布。
 - 修改 module-1 的依赖关系,修改 module-1 的版本号,发布。
 
这还仅仅只有两个 package,如果依赖关系更复杂,大家可以想想发布的工作量有多大。
什么是lerna?为什么要使用lerna?
lerna 到底是什么呢?lerna 官网上是这样描述的。
A tool for managing JavaScript projects with multiple packages.
这个介绍可以说很清晰了,引入lerna后,上面提到的问题不仅迎刃而解,更为开发人员提供了一种管理多 packages javascript 项目的方式。
- 自动解决packages之间的依赖关系
 - 通过 
git检测文件改动,自动发布 - 根据 
git提交记录,自动生成 CHANGELOG 
使用lerna的基本工作流
环境配置
- Git 在一个 lerna 工程里,是通过 git 来进行代码管理的。所以你首先要确保本地有正确的 git 环境。 如果需要多人协作开发,请先创建正确的 git 中心仓库的链接。 因此需要你了解基本的 git 操作,在此不再赘述。
 - npm 仓库 无论你管理的 package 是要发布到官网还是公司的私有服务器上,都需要正确的仓库地址和用户名。 你可运行下方的命令来检查,本地的 npm 
registry地址是否正确。 
npm config ls
- lerna 你需要全局安装 lerna 工具。
 
npm install lerna -g
初始化一个lerna工程
在这个例子中,我将在我本地根目录下初始化一个lerna工程。
- 创建一个空的文件夹,命名为 
lerna-demo 
mkdir lerna-demo
- 初始化
 
cd lerna-demo
lerna init
执行成功后,目录下将会生成这样的目录结构。
- packages(目录)
 - lerna.json(配置文件)
 - package.json(工程描述文件)
- 添加一个测试package
 
默认情况下,package是放在
packages目录下的。
// 进入packages目录
cd lerna-demo/packages
// 创建一个packge目录
mkdir module-1
// 进入module-1 package目录
cd module-1
// 初始化一个package
npm init -y
执行完毕,工程下的目录结构如下
--packages
  --module-1
    package.json
--lerna.json
--package.json
- 安装各 packages 依赖 这一步操作,官网上是这样描述的。
 
Bootstrap the packages in the current Lerna repo. Installs all of their dependencies and links any cross-dependencies.
cd lerna-demo
lerna bootstrap
在现在的测试 package 中,module-1 是没有任何依赖的,因此为了更加接近真实情况。你可已在 module-1 的package.json 文件中添加一些第三方库的依赖。 这样的话,当你执行完该条命令后,你会发现 module-1 的依赖已经安装上了。
- 发布 在发布的时候,就需要 
git工具的配合了。 所以在发布之前,请确认此时该 lerna 工程是否已经连接到git 的远程仓库。你可以执行下面的命令进行查看。 
git remote -v
// print log
origin  git@github.com/iNuanfeng/lerna-demo.git (fetch)
origin  git@github.com/iNuanfeng/lerna-demo.git (push)
本篇文章的代码托管在 Github 上。因此会显示此远程链接信息。 如果你还没有与远程仓库链接,请首先在 github 创建一个空的仓库,然后根据相关提示信息,进行链接。
lerna publish
执行这条命令,你就可以根据cmd中的提示,一步步的发布packges了。实际上在执行该条命令的时候,lerna会做很多的工作。
-  Run the equivalent of  `lerna updated`  to determine which packages need to be published.
 -  If necessary, increment the  `version`  key in  `lerna.json`.
 -  Update the  `package.json`  of all updated packages to their new versions.
 -  Update all dependencies of the updated packages with the new versions, specified with a  [caret (^)](https://docs.npmjs.com/files/package.json#dependencies).
 -  Create a new git commit and tag for the new version.
 -  Publish updated packages to npm.
到这里为止,就是一个最简单的lerna的工作流了。但是lerna还有更多的功能等待你去发掘。 lerna有两种工作模式,Independent mode和 Fixed/Locked mode,在这里介绍可能会对初学者造成困扰,但因为实在太重要了,还是有必要提一下的。 lerna的默认模式是 Fixed/Locked mode,在这种模式下,实际上 lerna 是把工程当作一个整体来对待。每次发布 packges,都是全量发布,无论是否修改。但是在 Independent mode 下,lerna 会配合Git,检查文件变动,只发布有改动的packge。
lerna最佳实践
为了能够使 lerna 发挥最大的作用,根据这段时间使用 lerna 的经验,总结出一个最佳实践。下面是一些特性。
- 采用 Independent 模式
 - 根据 
Git提交信息,自动生成 changelog - eslint 规则检查
 - prettier 自动格式化代码
 - 提交代码,代码检查 hook
 - 遵循 semver 版本规范
 
大家应该也可以看出来,在开发这种工程的过程的,最为重要的一点就是规范。因为应用场景各种各样,你必须保证发布的 packge 是规范的,代码是规范的,一切都是有迹可循的。这点我认为是非常重要的。github代码
lerna管理前端模块实践的更多相关文章
- 基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
		
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/NlOn7er0ixY1HO40dq5Gag作者:孔垂亮 目录 一.背景二.Monorepo vs M ...
 - JS模块规范   前端模块管理器
		
一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...
 - 前端模块与CMS结合
		
前端模块与CMS结合 在<FIS官方技术群>经常看到一些讨论,这次是 前端组件化与CMS的相关讨论,主要观点来自群里 漂流瓶(张云龙前辈). CMS是运营人员直接操作,我们往往需求各种各样 ...
 - Atitit 管理原理与实践attilax总结
		
Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...
 - 转 -Filebeat + Redis 管理 LOG日志实践
		
Filebeat + Redis 管理 LOG日志实践 小赵营 关注 2019.01.06 17:52* 字数 1648 阅读 24评论 0喜欢 2 引用 转载 请注明出处 某早上,领导怒吼声远远传来 ...
 - webpack前言:前端模块系统的演进
		
前端开发和其他开发工作的主要区别,首先是前端是基于多语言.多层次的编码和组织工作,其次前端产品的交付是基于浏览器,这些资源是通过增量加载的方式运行到浏览器端,如何在开发环境组织好这些碎片化的代码和资源 ...
 - 理解前端模块概念:CommonJs与ES6Module
		
前言 现代前端开发每时每刻都和模块打交道.例如,在项目中引入一个插件,或者实现一个供全局使用组件的JS文件.这些都可以称为模块. 在设计程序结构时,不可能把所有代码都放在一起.更为友好的组织方式时按照 ...
 - 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程
		
项目简介 vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youla ...
 - 使用bower管理前端依赖
		
bower,类似于npm.maven等后端管理构建工具一样,bower可以用来管理前端浏览器依赖,关于bower详细介绍参考官网:https://bower.io/ bower init命令:初始化项 ...
 
随机推荐
- 记录一次OCR程序开发的尝试
			
记录一次OCR程序开发的尝试 最近工作中涉及到一部分文档和纸质文档的校验工作,就想把纸质文件拍下来,用文字来互相校验.想到之前调用有道智云接口做了文档翻译.看了下OCR文字识别的API接口,有道提供了 ...
 - CSDN博客图片水印自定义及去除方法
			
小图上传说明 尺寸较小的图片上传后默认不加水印,而且默认水平居中显示.你可以更改markdown格式后面的#pic_center,这是设置图片水平对齐的方式.#pic_left就是左对齐,#pic_r ...
 - 突然挂了!Redis缓存都在内存中,这下完了!
			
我是Redis,一个叫Antirez的男人把我带到了这个世界上. “快醒醒!快醒醒!”,隐隐约约,我听到有人在叫我. 慢慢睁开眼睛,原来旁边是MySQL大哥. “我怎么睡着了?” “嗨,你刚才是不是出 ...
 - web网站——apache和nginx对比02
			
nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...
 - chrome插件: yapi 接口TypeScript代码生成器
			
前言 2020-09-12 天气晴,蓝天白云,微风,甚好. 前端Jser一枚,在公司的电脑前,浏览器打开着yapi的接口文档,那密密麻麻的接口数据,要一个一个的去敲打成为TypeScript的inte ...
 - django中外键的related_name属性
			
我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对多的类型. class Person(models.Model); name = models.CharField(verbose_name ...
 - Linux Shell脚本简单语法汇总(Deepin下运行)
			
整理自: https://www.runoob.com/?s=shell Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 sh ...
 - 适用于 deno 的多版本管理工具 dvm 发布
			
不知不觉中,deno 已经默默的发布了 3 个版本了: 0.1.0 0.1.1 0.1.2 昨晚通宵做了一个 deno 多版本的管理工具: dvm. github 地址: https://github ...
 - 《kubernetes + .net core  》dev ops部分
			
目录 1.kubernetes 预备知识 1.1 集群资源 1.1.1 role 1.1.2 namespace 1.1.3 node 1.1.4 persistent volume 1.1.5 st ...
 - Ubuntu通过Apache安装WebDav
			
使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...