本文已参与 周末学习计划,点击查看详情
继之前的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 能获取当前项目的版本号
现在我们要定义一个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)
}
复制代码
下面我们来执行命令,之后之后报了错
我们重新在core的目录下执行以下npm link,后再次执行zl-cli-dev
优化上可以在core中加入try catch来处理异常。
try {
checkPkgVersion()
checkNodeVersion()
} catch (e) {
log.error(e.message)
}
复制代码
OK,我们的版本检查完成了!