• 版本规范和Changelog
    • #2.2.1 npm包的版本">#2.2.1 npm包的版本
      • #Semantic Versioning">#Semantic Versioning
      • #版本范围">#版本范围
      • #为什么我们要遵循Semantic Versioning ?">#为什么我们要遵循Semantic Versioning ?
    • #2.2.2 changelog">#2.2.2 changelog
    • #2.2.3 自动化的npm包版本控制和Changelog">#2.2.3 自动化的npm包版本控制和Changelog
    • #扩展学习资料">#扩展学习资料

    版本规范和Changelog

    #2.2.1 npm包的版本

    #Semantic Versioning

    npm版本规范和Changelog - 图1
    前面的是正式版本,后面的是pre-release版本

    • major

    主版本,一般代表这Breaking Change,例如vue1.x和vue2.x、webpack 3.x和webpack4.x

    • minor

    次版本,一般代表着新的feature的出现

    • patch

    一般不包含新功能,知识bugfix或和功能关系不大的修改

    • pre-release
      • alpha
      • beta
      • rc(release candidate)

    预发行版本,一般用于正式版发行前的验证、联调和测试,和正式版本好之间用-连接

    • 大小比较

    2.3.2 > 2.2.17 > 2.2.17-beta.1 > 2.2.17-beta.0 > 2.2.17-alpha.1 > 2.2.16

    1

    #版本范围


    // 1. - 表示范围,边界可等

    • 案例: 1.2.3-2.3.4 // 大于等于1.2.3 小于等于 2.3.4

    // 2. x 表示通配,和各种语言的通配符一样

    x 案例:1.2.x // 大于等于1.2.0 小于1.3.0

    // 3. ~ 表示限制minor版本的升级

    ~ 案例:~1.2.3 // 大于1.2.3 小于1.3.0

    // ^ 表示允许第二个非零的版本的升级

    ^ 案例:^1.2.3 // 大于1.2.3 小于2.0.0
    ^ 案例:^0.2.3 // 大于0.2.3 小于0.3.0
    ^ 案例:^0.0.3 // 大于0.0.3 小于0.0.4

    #为什么我们要遵循Semantic Versioning ?

    • 为了让我们的版本语义和npm社区统一,可以让我们的npm包可以正确的被用户使用
    • 享受社区生态带来的遍历,让我们可以利用社区现有的方案,更灵活的管理依赖的版本

      #2.2.2 changelog

    • 什么是changelog?

    Changelog是以时间为倒序的列表,记录所有版本的重大变化

    • 为什么要有Changelog?

    为什么让我提供库和框架的用户了解每个版本发生了哪些变化,提供多于版本号的信息

    #2.2.3 自动化的npm包版本控制和Changelog

    • release-it
      • 根据git commit自动生成版本号
      • 自动生成Changelog
      • 丰富的hooks用来定制发版逻辑
      • 提供插件机制,高度可扩展

    release-it 配置文件
    {`
    “hooks”: {
    “after:bump”: “auto-changelog -p”
    },
    “git”: {
    “changelog”: “auto-changelog —stdout —commit-limit false”,
    “requireCleanWorkingDir”: false,
    “requireUpstream”: true,
    “requireCommits”: false,
    “addUntrackeFiles”: false,
    “commit”: true,
    “commitMessage”: “version release ${version}”,
    “commitArgs”: “”,
    “tag”: true,
    “tagName”: “${version}”,
    “tagAnnotation”: “Release ${version}”,
    “taArgs”:””,
    “push”:true,
    “pushArgs”: “—follow-tags”,
    “pushRepo”: “origin”
    },
    “npm”: {
    “publish”: true,
    “publishPath”: “.”,
    “access”: null,
    “otp”: null
    },
    “plugins”: {
    “@release-it/conventional-changlog”: {
    “preset”: “angular”,
    “infile”: “CHANGELOG.md”
    }
    }
    }

    `

    package.json
    {
    “script” : {
    “release”: “release-it”,
    “release:alpha”: “release-it —preRelease=alpha”,
    “release:beta”: “release-it —preRelease=beta”
    }
    }

    案例:
    git add .
    git commit -m”feat: update xxx”
    yarn release
    # 一路回车

    #扩展学习资料

    .npmrc-npm的配置文件

    由于国内网络问题,部分常用的二进制依赖下载速度较慢,为了加速二进制依赖下载,我们可以利用.npmrc配置国内的镜像源:
    ELECTRON_MIRROR = “https://npm.taobao.org/mirrors/electron/“ electron
    PHANTOMJS_CDNURL = “https://npm.taobao.org/mirrors/phantomjs/“ phantomjs
    SASS_BINARY_SITE = “https://npm.taobao.org/mirrors/node-sass/“ node-sass

    原地址