最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Lerna 给我们工程带来了什么

    正文概述 掘金(秋勋)   2021-02-13   953

    repo

    这里先介绍两种项目代码管理方式(monorepo、multirepo)。顾名思义monorepo就是将多个项目放在一个仓库中进行管理,而mutirepo则相反是放在多个仓库中进行维护。

    monorepo所带来的就是代码集中化管理,各个模块间的相互依赖变得简单、清晰。对于一个大型项目来说,模块的拆分尤为重要,所以我认为对于模块耦合性较高的、或者说多个模块为一个项目服务的情况下,从管理和维护来讲,这个方案是一个不错的选择。当然它也有repo的体积变得很大、权限也不好分配等缺点。

    mutirepo带来的就是代码的多元化管理,降低了各个项目或团队的耦合性,每个团队单独作战,维护各自唯一的package,对于独立的项目,也许是不错的管理方式,但也需要考虑重复性工作、团队沟通成本、repo管理成本等影响

    两种方案各有千秋,需要考虑自己项目、团队的实际情况来进行选择,相信总有一款适合你

    而monorepo的解决方案就是lerna

    目前很多开源项目采用lerna来进行项目管理(Babel、vue-cli、create-react-app。。。)

    lerna

    模式

    lerna提供两种模式

    1. Fixed/Locked(默认)

    固定模式,项目维护一个版本号,也就是在lerna.json文件中,当运行lerna publish,如果某个模块在上次发布版本之后有了更新,那么他将会更新到新发布的版本,也就意味着你只能在你确定需要更新时才能发布一个新的版本(不能随便发啦!!!)

    {
      "packages": [
        "packages/*"
      ],
      "version": "0.0.0"
    }
    
    1. Independent

    lerna init --independent 独立模式,它允许Lerna中每个模块独立维护自己的版本号,也将导致你每次发布时,会有一个提示,针对本次更改的包指定他是patch、minor、major或者custom change

    {
      "packages": [
        "packages/*"
      ],
      "version": "independent"
    }
    

    命令

    顾名思义,该命令是在packages下创建一个新的package。详细资料

    需要注意的一点是创建的目录是在lerna.json中配置,例子

    "packages": [
      "packages/@vue/*"
    ]
    

    安装本地或远程依赖包,需要注意的是,一次只能添加一个包(与yarn add 和 npm install不同)

    当运行这个命令,lerna到底干了啥

    1. 会给每一个package返回内的应用安装依赖
    2. 修改每个应用的package.json文件

    参数说明 --dev 开发环境依赖包

    --scope 安装范围,当你想在某个应用安装时,应该需要它

    • 举个?

    给packages目录下所有前缀为prefix-的应用安装module-1依赖

    给module-2安装module-1

    给所有应用安装module-1

    yarn

    yarn相比npm优点

    • 速度(并行安装、离线模式)
    • 简洁(输出信息更加简洁,结合emoji增加趣味性)
    • 更好的语义化 (add/remove)

    yarn workspace

    yarn workspace允许我们使用monorepo的形式管理项目,在安装 node_modules 的时候它不会安装到每个子项目的 node_modules 里面,而是直接安装到根目录下面,这样每个子项目都可以读取到根目录的 node_modules。整个项目只有根目录下面会有一份yarn.lock文件。子项目也会被 link 到 node_modules 里面,这样就允许我们就可以直接用 import 导入对应的项目

    *注意 当我们开发node应用 或者不需要对项目进行打包操作,要慎用全局依赖,因为当我们使用lerna publish对项目进行发布时,是将每个子项目单独发布到npm上(也就是最终的依赖以子项目的package.json为准)

    开启workspace

    {
      "name": "root",
      "private": true, // 私有的,用来管理整个项目,不会被发布到npm
      "workspaces": [
        "packages/*"
      ],
      "devDependencies": {
        "lerna": "^3.22.1"
      }
    }
    

    起源地下载网 » Lerna 给我们工程带来了什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元