lerna 深入学习 | 周末学习

本文已参与 周末学习计划,点击查看详情

继之前的lerna开发和发包流程,后边是lerna的版本号检查过程

一、检查版本

我们需要先安装几个依赖,分别是import-local和npmlog,主要作用是优先使用本地库和提示输出

npm i -S import-local
npm i -S npmlog
复制代码

当依赖记载玩,我们就开始写代码了,先修改core文件下bin目录中的index.js,在这里我们使用import-local,做一些提示输出。

const importLocal = require('import-local')
if(importLocal(__filename)) {
  require('npmlog').info('cli', '正在使用zl-cli 本地版本')
} else {
  require('../lib')(process.argv.slice(2))
}

复制代码

然后我们还需要修改lib目录下index.js

module.exports = core;

const pkg = require('../package.json')
function core() {
  checkPkgVersion()
}

function checkPkgVersion() {
  console.log(pkg.version)
}
复制代码

现在我们运行zl-cli-dev,就可以在控制台看到输出了。

二、检查node版本

检查node版本号得主要目的是,确定使用node得最低版本号。让项目可以正常运行。

创建log

lerna create @zl-cli-dev/log
复制代码

把log目录移动到utils下,修改下文件名log.js为index.js ,并修改package.json的文件

lerna add npmlog utils/log/
复制代码

在log下的bin目录的index.js

const log = require('npmlog')

function index() {
  log.info('cli', 'test')
}
复制代码

并在core目录中的package.json引用

"dependencies": {
    "@zl-cli-dev/log": "./../../utils/utils/log"
 },
复制代码

在core下的bin目录的index.js新加

function checkPkgVersion() {
  console.log(pkg.version)
  log()
}
复制代码

然后在命令中进入core/cli目录执行

zl-cli-dev
复制代码

执行得到我们得版本号

npmlog的使用

在log目录下lib/index.js文件,修改

const log = require('npmlog')

log.level = process.env.LOG_LEVEL ? process.env.LOG_LEVEL : 'info' // 判断debug模式
log.heading = 'zl' // 修改前缀
log.headingStyle = { fg: 'red', bg: 'black' }
log.addLevel('success', 2000, { fg: 'green', bold: true}) // 添加自定义命令

module.exports = log
复制代码

使用的方式是在core目录,lib/index.js目录

module.exports = core;

const pkg = require('../package.json')
const log = require('@zl-cli-dev/log')

function core() {
  checkPkgVersion()
  checkNodeVersion()
}

function checkNodeVersion() {
  // 第一步,获取当前Node版本号
  console.log(process.version)
  // 第二步,比对最低版本号

}
function checkPkgVersion() {
  log.notice('cli', pkg.version)
}
复制代码

以上通过执行zl-cli-dev 能获取当前项目的版本号

image.png

现在我们要定义一个const的文件,定义一些常量。在这里我们定义node的最低版本号,
我当前的是14.16.0的
先做一次错误判断

const LOWEST_NODE_VERSION = '15.0.0'

module.exports = {
  LOWEST_NODE_VERSION
}
复制代码

然后core/cli/lib/index.js目录引用,同时我们也需要semver和colors两个库,一个做版本比较,一个错误颜色输出
加载方式:

lerna add semver core/cli/
lerna add colors core/cli/
复制代码

现在我们可以写index.js的文件了

const semver = require('semver')
const colors = require('colors/safe')
const pkg = require('../package.json')
const log = require('@zl-cli-dev/log')
const constant = require('./const')
function core() {
  checkPkgVersion()
  checkNodeVersion()
}

function checkNodeVersion() {
  const currentVersion = process.version
  const lowestVersion = constant.LOWEST_NODE_VERSION
  if(!semver.gte(currentVersion, lowestVersion)) {
    throw new Error(colors.red(`zl-cli 需要安装 v${lowestVersion}以上版本的Node.js`))
  }
  
}
function checkPkgVersion() {
  log.notice('cli', pkg.version)
}
复制代码

下面我们来执行命令,之后之后报了错

image.png

我们重新在core的目录下执行以下npm link,后再次执行zl-cli-dev

image.png

优化上可以在core中加入try catch来处理异常。

try {
    checkPkgVersion()
    checkNodeVersion()
  } catch (e) {
    log.error(e.message)
  }
复制代码

image.png

OK,我们的版本检查完成了!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享