Lerna基础篇

Lerna

A tool for managing JavaScript projects with multiple packages

一个工具,优化了使用git和npm管理多包存储库的工作流。

用于管理包含多个package结构的代码仓库的工具,优化工作流。
新版的vue-cli、nuxt与babel均使用lerna进行自身的package管理。

自动解决package之间的依赖关系;
通过git检测文件改动,自动发布;
根据git提交记录,自动生成changelog;

- 两种工作模式

 Fix/Locked mode(default)--固定模式:
     
    在publish的时候,如果距离上次发布只修改了一个模块,将会更新对应模块的版本到新的版本号,然后可以只发布修改的库。
    会在lerna.json文件里面"version": "0.1.5",依据这个号,进行增加,只选择一次,其他有改动的包自动更新版本号

 Independent mode--独立模式:
    
   	lerna init --independent初始化项目。
    lerna.json文件里面"version": "independent",
   	每次publish时,您都将得到一个提示符,提示每个已更改的包,以指定是补丁、次要更改、主要更改还是自定义更改。

- 环境配置

git环境

npm仓库

npm install lerna -g

- 初始化

	lerna init
	
	生成如下文件:
 - packages(目录)
 - lerna.json(配置文件)
 - package.json(工程描述文件)

- lerna.json

{
  "version": "1.1.3", // 当前库的版本
  "npmClient": "npm",允许指定命令使用的client, 默认是 npm, 可以设置成 yarn
  "command": {
    "publish": {
      "ignoreChanges": [可以指定那些目录或者文件的变更不会被publish
        "ignored-file",
        "*.md"
      ]
    },
    "bootstrap": {
      "ignore": "component-*",指定不受 bootstrap 命令影响的包
      "npmClientArgs": ["--no-package-lock"]指定默认传给 lerna bootstrap 命令的参数      
    }
  },
  "packages": ["packages/*"]指定包所在的目录
}
  • Set Up

    Set up yarn的workspaces模式

     默认npm,每个子package都有自己的node_modules模块,这样设置后,只有顶层有一个node_modules块。
    
  • lerna create [loc]

    name:包名
    
    loc:位置 可选
    
  • 根目录的package.json

	 "workspaces": [
	    "packages/*",
	    "packages/@gp0320/*"
	  ]

- 创建一个包gpnote默认放在 workspaces[0]所指位置

	lerna create gpnote
  • 创建一个包gpnote指定放在 packages/@gp0320文件夹下,注意必须在workspaces先写入packages/@gp0320,看上面
	lerna create gpnote packages/@gp0320

	lerna add [@version] [--dev] [--exact]
	
	增加本地或者远程package做为当前项目packages里面的依赖
	
	--dev devDependencies 替代 dependencies
	--exact 安装准确版本,就是安装的包版本前面不带^, Eg: "^2.20.0" ➜ "2.20.0"

  • lerna bootstrap

    默认是npm i,因为我们指定过yarn,so,run yarn install,会把所有包的依赖安装到根node_modules.

  • lerna list

    列出所有的包,如果与你文夹里面的不符,进入那个包运行yarn init -y解决

  • lerna import

    导入本地已经存在的包

  • lerna run

    lerna run < script > – […args] # 运行所有包里面的有这个script的命令
    $ lerna run --scope my-component test

  • lerna exec

    运行任意命令在每个包

	lerna exec -- < command > [..args] # runs the command in all packages
	$ lerna exec -- rm -rf ./node_modules
	$ lerna exec -- protractor conf.js
	lerna exec --scope my-component -- ls -la
  • lerna link

    项目包建立软链,类似npm link

  • lerna clean

    删除所有包的node_modules目录

  • lerna changed

    列出下次发版lerna publish 要更新的包。

    需要先git add,git commit 提交。
    然后内部会运行git diff --name-only v版本号 ,搜集改动的包,就是下次要发布的。并不是网上人说的所有包都是同一个版全发布

  • lerna publish

    会打tag,上传git,上传npm。
    如果你的包名是带scope的例如:“name”: “@gp0320/gpwebpack”,
    那需要在packages.json添加

你可能感兴趣的:(lerna)