摘要:如何像那样进行多包管理呢项目的里面存放了旗下的所有包,比如。如果你不想这么麻烦,那么有一个办法就是,不用,也就是你的包名不加前缀,这样你的包就默认是公共的包了,完全可以不用先去提交一次公共版本,才能使用来管理你的包,简单多了。
温馨提示:请直接看最后面的正确操作,如果不懂,再回顾全文。 如何像 babel 那样进行多包管理呢?
babel 项目的 packages 里面存放了 babel 旗下的所有包,比如:babel-core。
我们在安装 babel 的时候一般不是这样装的:yarn add babel,而是这样安装的:yarn add @babel/babel-core,这是由于 babel 进行了分包管理的缘故,又因为 npm 支持scope packages,所以我们可以这样子来安装包。
我们再来看scope packages,npm 支持以@符开头的包名称,把它叫做有范围的包,示例:@somescope/somepackage。
但是在发布包的时候,npm 会把这种包当成是你的私有包来进行发布,一般我们是发布不了的,因为 npm 会提示需要登录等等东西,这个时候我们一般就加上一个参数,告诉 npm 我们要发布的这个包是一个公共包:npm publish --access=public,不出意外这个包就可以发布成功了。
别人要安装你的包:yarn add @somescope/somepackage,看起来跟安装 babel-core 一致了。
但是还差点东西,就是利用 lerna 来进行管理。
要达到类似于 babel 那样的管理方式,首先,你需要有scope packages,正好,我们现在有了一个@somescope/somepackage包,现在我们就用 lerna 来管理它。
首先,我们在 github 上面新建一个仓库,就叫做:testlerna 吧(使用已有仓库也行),然后克隆到本地,进入到 testlerna 目录,执行:lerna init或者是lerna init -i(表示 packages 下面的包多带带使用版本号),这个时候,lerna 就为我们生成了这几个东西:
testlerna |-package.json |-lerna.json |-packages/
packages 目录就是 lerna 要进行管理的各种包的目录,所有的包都会放在这个目录下面。
接着执行:lerna import ../scopepackage(假设咱们的这个@somescope/somepackage包是放在 scopepackage 目录里面的),这样就会把我们刚才发布的那个包导入到 packages 目录里面,这时候目录看起来像这个样子:
testlerna |-package.json |-lerna.json |-packages/ |--scopepackage/ |---package.json |---...
做一些修修改改并执行 git commit 后,我们就可以执行lerna publish了,不出意外你的@somescope/somepackage也在 npm 上更新了,原来的那个@somescope/somepackage仓库可以删除掉了,因为我们把它放在 testlerna 项目中进行管理了,这样就跟 babel 那样的管理方式一样了。
这种方式是有一丢丢麻烦,因为 npm 默认会把 @ 开头的包当成私有包来看待,就导致了如果不在 npm 上提交一次公共版本,执行lerna publish时就会发布不了,可能lerna publish调用的 npm 命令是npm publish它没有加--access=publish参数。
如果你不想这么麻烦,那么有一个办法就是,不用scope package,也就是你的包名不加 @ 前缀,这样你的包就默认是公共的包了,完全可以不用先去提交一次公共版本,才能使用 lerna 来管理你的包,简单多了。
更新,不用像上面那么麻烦了,还得新建一个仓库,你大可以把前面那种方法当成是学习 npm 的 scope package 吧。
正确的方式是这种:
使用 lerna init 后,packages 里面也有你的包了,这时候我们要先进行第一次发布,直接进入 packages/你的包目录,执行:npm publish --access=public,
发布完以后,下次你就可以在主项目里面使用:lerna publish来管理了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103367.html
摘要:目前最常见的解决方案是和的特性。具体的使用方法移步官网而使用作为包管理器的同学,可以在中以字段声明,就会以的方式管理。这样的话,无论你的包管理器是还是,都能发挥的优势要是包管理是,就会把依赖安装交给处理。 最近我接手了一个项目,代码量比较大、有点复杂。仓库 clone 下来代码有 50+ MB,npm install 安装完体积飚到了近 2GB …… 熟悉了一下,这个项目比较复杂,采用...
摘要:最近发现公司一个项目的目录组织挺奇怪的,所有的子项目都放在了目录里,还有这种骚操作特意查了下资料,发现是一种比较流行的项目管理模式。 最近发现公司一个项目的目录组织挺奇怪的,所有的子项目都放在了packages目录里,还有这种骚操作?特意查了下资料,发现是一种比较流行的monorepo项目管理模式。近几年比较火的React,Vue,Babel都是用的这种模式: showImg(http...
摘要:从到完美,写一个库库前端组件库之前讲了很多关于项目工程化前端架构前端构建等方面的技术,这次说说怎么写一个完美的第三方库。使用导出模块,就可以在使用这个库的项目中构建时使用功能。 从 1 到完美,写一个 js 库、node 库、前端组件库 之前讲了很多关于项目工程化、前端架构、前端构建等方面的技术,这次说说怎么写一个完美的第三方库。 1. 选择合适的规范来写代码 js 模块化的发展大致有...
摘要:从到完美,写一个库库前端组件库之前讲了很多关于项目工程化前端架构前端构建等方面的技术,这次说说怎么写一个完美的第三方库。使用导出模块,就可以在使用这个库的项目中构建时使用功能。 从 1 到完美,写一个 js 库、node 库、前端组件库 之前讲了很多关于项目工程化、前端架构、前端构建等方面的技术,这次说说怎么写一个完美的第三方库。 1. 选择合适的规范来写代码 js 模块化的发展大致有...
摘要:打造个人团队适用的开源项目规范是一个用来优化托管在上的多代码库的工作流的一个管理工具可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。 打造个人or团队适用的开源项目规范 lerna Lerna 是一个用来优化托管在gitnpm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布...
阅读 3388·2021-11-24 09:38
阅读 1387·2021-11-22 15:08
阅读 1456·2021-09-29 09:35
阅读 478·2021-09-02 15:11
阅读 1306·2019-08-30 12:55
阅读 387·2019-08-29 17:16
阅读 493·2019-08-29 11:30
阅读 417·2019-08-26 13:23