在我的项目中有一个脚本文件时这样的
// 使用 cross-spawn 模块,执行 Git pull 命令
const spawn = require('cross-spawn')
// import chalk from 'chalk'
const chalk = require('chalk')
const log = console.log
// 判断node版本是否大于16.12.0
const nodeVersion = process.versions.node
const nodeVersionArr = nodeVersion.split('.')
const nodeVersionNum =
Number(nodeVersionArr[0]) * 100 + Number(nodeVersionArr[1]) * 10 + Number(nodeVersionArr[2])
if (nodeVersionNum < 1720) {
// 这边不可以直接return ,mjs格式的文件不支持return
return log(chalk.hex('#ff00cc')(`Node.js version must be greater than 16.12.0. Aborting.`))
} else {
log(chalk.hex('#646cff')(`Node.js version is ${nodeVersion}.`))
}
// 执行一些我需要的代码...
一开始为了兼容import,我将文件格式改为了mjs,但是mjs有一个问题就是不能使用return,这违反了我的个人习惯,我使用了process.exit(1)去代替return。
但是当nodejs走到上一个判断的时候也就是不符合我需要的你的版本的时候,process.exit(1)运行了,但是在控制台是会报错的。
有报错我就不能忍了,作为一个微小的强迫症患者,必须看到它正常退出心里才能舒服。所以我想文件又改回了js,添加了babel插件 ‘@babel/plugin-transform-runtime’,运行时转译
这个插件会帮助我
将 chalk 模块转换为 CommonJS 格式,
在 Babel 配置中启用 @babel/plugin-transform-runtime 插件,并设置 useESModules 为 false。
{
"plugins": [
"@babel/plugin-transform-runtime",
{
"absoluteRuntime": false,
"corejs": false,
"helpers": true,
"regenerator": true,
"useESModules": false
}
]
}
然后这个报错就能正常退出了,这就让我很舒服