Gulp文件中拼接两个字符串出现semver相关报错该如何解决?
报错原因
报错核心源于gulp-bump依赖的bump-regex库在执行版本差校验时,读取目标package.json中原生version字段解析为null,调用semver.diff方法时无法读取null的major属性。
排查与修复方案
校验
package.json原生version字段格式gulp-bump默认操作的是package.json标准version字段,你的代码仅用到了自定义的semVer字段,若原有version字段为空、格式不符合SemVer规范或不存在,就会触发解析失败。请保证根目录package.json的version字段为合法SemVer格式(如1.0.0)。修正带Git hash的版本号格式
你拼接的[版本号]-[hash]格式本身符合SemVer预发布版本规范,但为了避免hash中出现特殊字符导致校验失败,建议仅取Git短hash(前7位):
hash = getHash().toString().slice(0,7);
- 修正文件输出路径
执行命令时Gulp的工作目录自动切换到了gulpfiles目录,你当前代码dest('./')会把修改后的package.json写入gulpfiles目录,而非覆盖根目录的原文件,需要将输出路径改为上层目录:
.pipe(dest('../'));
- 补充异步任务返回值
Gulp需要感知异步流的完成状态,需要在src前加return,避免任务提前结束导致的异常:
return src(['../package*.json']) .pipe(gulp_bump({ version: newVersion })) .pipe(dest('../'));
可选跳过校验配置
如果不需要gulp-bump执行版本差校验,可以直接在配置中添加skipSemverCheck: true强制写入版本号:
.pipe(gulp_bump({ version: newVersion, skipSemverCheck: true }))
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

