搭建Vue3组件库:第十一章 建立语义化版本并提交组件库到NPM仓库

简介: 本章介绍语义化版本号和如何发布npm包

语义化版本是这样规定的。

版本格式:主版本号.次版本号.修订号(MAJOR.MINOR.PATCH),版本号递增规则如下:

  • 主版本号:当你做了不兼容的 API 修改;
  • 次版本号:当你做了向下兼容的功能性新增;
  • 修订号:当你做了向下兼容的问题修正。

Vue 的版本为例 :

  • Vue 2.6.0
  • Vue 2.7.0 - 新增 Composition API;
  • Vue 2.7.1 - 修正 bug;
  • Vue 3.0.0 - alpha - 新版本 Vue 的第一个预览版、与以前版本 API 不兼容;
  • Vue 3.0.0 - alpha.2 - 第二个预览版;
  • Vue 3.0.0 - beta - 测试版、也叫公开测试版;
  • Vue 3.0.3 - RC - Release Condidate 已经具备正式上线条件的版本,也叫做上线候选版;
  • Vue 3.0.0 - GA - General Availability 正式发布的版本;
  • Vue 3.0.1 - 修正 bug。

了解了语义化版本的知识,下面我们就可以按照社区通行的规则发布自己的版本了。

具体参考地址:语义化版本控制规范(SemVer)


修改 Package 版本信息

发布一个版本首先要做的就是修改 package.json 上的版本信息。对于 npm 软件包管理器来讲, package 上的版本号就是唯一的版本标识。

文件名:package.json

  "version": "1.0.0",

如果了解发布npm包的小伙伴应该知道可以通过命令修改版本号

// 自动更改版本号,并且commit
// npm version xxx

// 控制台会返回下一个小版本号 如v1.0.0 ===> v1.0.1
npm version patch

// 重新发布
npm publish

注意:如果你更新了你的工程,需要重新发布,记得要commit你的代码,不然会报错

// patch:补丁号,修复bug,小变动,如 v1.0.0->v1.0.1
npm version patch

// minor:次版本号,增加新功能,如 v1.0.0->v1.1.0
npm version minor

// major:主版本号,不兼容的修改,如 v1.0.0->v2.0.0
npm version major

根据你所修改的功能和版本差距,来修改你的版本号


设置 Git 版本库标签

Tag 是 git 版本库的一个标记, 指向某个 commit 的指针。

在发布版本的时候,应该给 git 打上一个 v.1.0.0 这样的版本标记 。

# 创建版本号对应的 git tag
git tag 1.0.0

# 将新的 git tag 推送到 github 上面
git push --tag 

推送版本到 Github ,就可以在 Git 上面看到一个版本标记,而且可以提供此版本的 zip 打包下载。实际上这个也可以作为一种软件分发方式,只不过相对于使用 npm 包管理器,没有提供自动依赖安装。

在这里插入图片描述


确认要发布的文件

文件名:package.json

{
  "files": ["dist/**/*"],
}

files字段描述了将软件包作为依赖项安装时要包括的条目,默认值为[“*”],这意味着它将包括所有文件。

如果需要把打包后的代码也发布到 NPM 仓库,我们这里只需要将dist目录包含即可

还可以在包的根目录或子目录中提供.npmignore 文件,以防止某些文件被发布。

.npmignore 文件的工作原理与.gitignore 一样。
如果存在.gitignore 文件,而缺少.npmignore, 则将改用.gitignore 的内容。

files字段内容会覆盖.npmignore.gitignore的内容

文件名:.npmignore

node_modules
.vscode
.github
.husky
config
demo
docs
test
.DS_Store
.gitignore
src
.eslintignore
.eslintrc.cjs
index.html
commitlint.config.js
jsdom-config.js
pnpm-lock.yaml
tsconfig.json
vite.config.ts

利用GitHub Action 实现自动发布

传统的做法是使用命令实现。在项目的根目录下,运行 npm publish 就可以实现。

还有一种方法就是利用 CI 工具实现,实际上这个过程叫做 CD 持续交付,对于组件库来讲,最终的交付就是推送到版本仓库中。

推送仓库的触发条件,肯定不是每次 push, 而是在有新的版本发布时,发布新版的动作可以通过判断 publish 提交的方法判定。具体做法为,首先单独划分一个 publish 分支,当发布版本时,就建立一个 pull requestpublish 分支,当在 githubmerge 分支时就触发发布流程。

首先,先划分 publish 分支。

git checkout -b publish-smarty-ui-vite
git push --set-upstream origin publish-smarty-ui-vite

根据目前的npm规则,首次发布比较严格,需要识别验证码。所以需要在本地发布。 在项目根目录下建立一个 publish.sh 文件。 这个 Shell 脚本的功能包括

  • 切换镜像仓库 (主要是由于国内默认是 taobao这种第三方仓库、需要切换到原始库)
  • 认证
  • 发布
  • 还原Taobao镜像仓库

文件名:publish.sh

#!/usr/bin/env bash
npm config get registry # 检查仓库镜像库
npm config set registry=http://registry.npmjs.org
echo '请进行登录相关操作:'
npm login # 登陆
echo "-------publishing-------"
npm publish # 发布
npm config set registry=https://registry.npm.taobao.org # 设置为淘宝镜像
echo "发布完成"
exit

使用命令行工具执行

# 修改执行权限
chmod +x publish.sh
# 执行
./publish.sh

由于我这里执行过程失败,我使用手动发布:

  • 检查仓库镜像库
npm config get registry

结果:

https://registry.npm.taobao.org/

我这里是淘宝镜像,所以要切换为官方镜像

  • 使用nrm查看镜像列表
nrm ls

结果:

  npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.cloud.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
  taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/
  • 切换为官方镜像
nrm use npm

结果:

Registry has been set to: https://registry.npmjs.org/
  • 登录NPM
npm login

结果:

npm WARN adduser `adduser` will be split into `login` and `register` in a future version. `adduser` will become an alias of `register`. `login` (currently an alias) will become its own command.
npm notice Log in on https://registry.npmjs.org/
Username: geniusman
Password:                                                                                                                                                                                           
Email: (this IS public) geniusmanyxh@gmail.com                                                                                                                                                      
npm notice Please check your email for a one-time password (OTP)
Enter one-time password: 60513851
Logged in as geniusman on https://registry.npmjs.org/.
  • 发布包
npm publish

结果:

npm notice 
npm notice 📦  study-vue-ui@1.0.0
npm notice === Tarball Contents ===
npm notice 1.1kB  LICENSE
npm notice 956B   README.en.md
npm notice 1.9kB  README.md
npm notice 8.4kB  dist/assets/entry.cb9ba4f4.css
npm notice 9.8kB  dist/smarty-ui.iife.js
npm notice 3.1kB  dist/smarty-ui.iife.js.map
npm notice 1.7kB  dist/smarty-ui.mjs
npm notice 3.3kB  dist/smarty-ui.mjs.map
npm notice 10.0kB dist/smarty-ui.umd.js
npm notice 3.1kB  dist/smarty-ui.umd.js.map
npm notice 1.5kB  package.json
npm notice === Tarball Details ===
npm notice name:          study-vue-ui
npm notice version:       1.0.0
npm notice filename:      study-vue-ui-1.0.0.tgz
npm notice package size:  8.0 kB
npm notice unpacked size: 44.8 kB
npm notice shasum:        8c6d4e3556c6f4222ccc3a4ac5d54ec636e5a590
npm notice integrity:     sha512-TajKl38rDMBKl[...]/T6jUCfM6HPfA==
npm notice total files:   11
npm notice
npm notice Publishing to https://registry.npmjs.org/
+ study-vue-ui@1.0.0

发布成功。

首次发布后,其余更新就可以使用 CI 工具自动完成了。

编写一个 Action 脚本用于自动打包,并推送新的软件包到 npm。

Action 的方法和前面讲的持续集成类似,只是发布动作,可以使用一个现成的 publish 插件完成。

插件地址:https://github.com/primer/publish

在需要提交 npm 库时需要认证,我们通过向 npm 申请 token 完成。

  • 申请token

在这里插入图片描述

  • 生成token

在这里插入图片描述

这个 Token 相当于随意操作你自己 npm 库的授权,提交的时候需要用到。但是又不能放在 Action 代码中,因为代码是公开的,一旦公开了 Token,相当于任何人都可以操作你的 npm 库,解决的办法就是使用 Action Secret 功能。

Action Secret 相当于建立了一个不公开的环境变量。只有项目的所有者可以设定,其他人则看不到。

  • 使用Action Secret

在这里插入图片描述

  • 添加NPM的token

在这里插入图片描述

添加完成查看:

在这里插入图片描述

  • 生成github个人令牌

在这里插入图片描述

  • 添加github的TOKEN

在这里插入图片描述

添加完成查看:

在这里插入图片描述

设置后就可以在 Action 脚本中使用了。

  • 编写action脚本

文件名:.github/workflows/publish.yml

name: Publish Smarty-ui-vite To NPM

on:
  push:
    branches: [publish-smarty-ui-vite]

jobs:
  publish:
    runs-on: ubuntu-latest

    name: "publish npm"

    environment: npm

    steps:
      - uses: actions/checkout@master
      - uses: pnpm/action-setup@v2.1.0
        with:
          version: 6.31.0
      - name: Install modules
        run: pnpm install
      - name: Build
        run: pnpm run build
      - name: "Publish to the npm registry"
        uses: primer/publish@3.0.0
        env:
          GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
          NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} # 跟前面步骤中的 NPM_AUTH_TOKEN 保持一致
        with:
          default_branch: "publish"
          dir: "."

提交代码到 github,并创建一个 Pull Request。

  • 创建Pull Request

在这里插入图片描述

  • 合并pull request

在这里插入图片描述

  • 查看工作流

在这里插入图片描述

  • 查看npm包

在这里插入图片描述

这里发现最新版本格式出了点问题,是因为我们没有更新版本的原因

1-更新版本

npm version patch // 也可以手动修改package.json

2-创建标签

git tag 1.0.1

3-推送

git push --tag

4-再次创建并合并一个pull request

由于重复操作这不在演示,直接查看结果:

在这里插入图片描述

完美。

相关文章
|
25天前
|
JavaScript 安全 测试技术
vue封装组件发布到Npm
【10月更文挑战第17天】
|
29天前
|
前端开发 JavaScript API
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
73 0
|
29天前
|
前端开发 JavaScript 开发工具
从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
219 0
|
30天前
|
资源调度 前端开发 安全
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
75 0
|
3月前
|
资源调度 JavaScript API
Vue3+TS+Vite开发组件库并发布到npm
这篇文章介绍了如何使用Vue 3、TypeScript和Vite开发一个包含35个常用UI组件和8个API功能函数的组件库`vue-amazing-ui`,并将其发布到npm,同时提供了组件库的安装使用说明和在线预览。
Vue3+TS+Vite开发组件库并发布到npm
|
3月前
|
缓存 资源调度 JavaScript
Vue3+TS+Vite开发组件库并发布到npm
**vue-amazing-ui 组件库** 是一个基于 Vue 3 的高质量 UI 组件库,提供了丰富的组件和工具函数。该库已发布至 npm,可通过 `pnpm i vue-amazing-ui`、`yarn add vue-amazing-ui` 或 `npm install vue-amazing-ui` 安装使用。组件包括按钮、面包屑、卡片、日期选择器等,同时提供了日期格式化、节流、防抖等实用工具函数。项目结构清晰,支持按需加载,并提供了详细的文档与在线预览。
117 1
Vue3+TS+Vite开发组件库并发布到npm
|
3月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
|
3月前
|
存储 安全 Java
阿里云云效产品使用合集之怎么设置使用npm私有仓库进行流水线拉取依赖
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
Node历史版本下载及配置npm镜像
Node历史版本下载及配置npm镜像
530 1
|
6月前
|
JSON 小程序 前端开发
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
微信小程序按需引入 vant 组件,自动清除项目中未使用的 vant 组件,减少代码包大小,避免因未使用到的 vant 组件触发隐私协议提交审核时被拒
83 1
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议

推荐镜像

更多