试着迈出自己的开源项目之路一步#1

481 阅读4分钟

前言

作为程序员,拥有自己的开源项目应该是一件如同呼吸一般正常的事情(大概,沉思ing)。

以普遍理性而论,程序员注重的是积累,优质的博客和github项目都是自己的最好背书,而临时抱佛脚的那种反而是负作用。

笔者恰好就是那种没有任何积累的在内卷中淡定躺平的杂鱼,是时候做点什么了!

做什么

稍微认真思考了一下,笔者决定做一个非常简易的标签页实现组件。

  • 学习使用一下最新的Vue.js生态
  • 熟悉vueRouter的设计和使用
  • 不依赖admin框架的时候单独实现标签页功能(具体什么时候?反比如之前我们一个项目没用公司的组件是因为嫌弃那个组件有bug然后自己找了一个开源的用了)
  • 想实现一下简单清晰的样式定制,这个需求是我自己的但我知识面不够没找到合适好用的,那我可以自己做一个

准备使用的开发环境依赖如下:

  • pnpm
  • Vite
  • Vue.js ^3
  • Typescript
  • vitepress
  • vue-router
  • Element Plus
  • eslint
  • prettier
  • commitizen
  • standard-version
  • husky

创建项目

要从这里开始吗???

创建github项目

给项目起名叫just-vue-tab,搜索了github和npm都没有被占用,可以使用。

项目仓库

因为参考了一些老文档和视频,并且考虑到发布npm包,所以还是使用了短线连接命名(其实也是不好改了感觉还是没问题的)。

搭建项目

# 使用pnpm和vite
pnpm create vite just-vue-tab --template vue-ts
cd just-vue-tab
# 初始化项目环境
pnpm install
# 关联远程仓库
git remote add origin git@github.com:baicy/just-vue-tab.git
git add .
git commit -m "init"
git push -u origin main

生成文档

安装使用VitePress

pnpm i vitepress -D

# npm scripts
{
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs",
    "docs:serve": "vitepress serve docs"
}

# 在项目根目录下新建docs文件夹,编写文档
.
├─ docs
│  ├─ .vitepress
│  │  └─ config.js
│  └─ index.md
└─ package.json

使用GitHub Pages和 GitHub Action

# 在./.github/workflow文件夹下创建文件deploy.yml
name: Deploy
on:
  push:
    branches: [ main ]
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      # install node & deps
      - name: Install node
        uses: actions/setup-node@v3.2.0
        with:
          node-version: "14.X"
      - name: Install deps
        run: npm install

      # build vitepress docs
      - name: Build VitePress
        run: npm run docs:build

      # push actions
      - name: Deploy to gh-pages
        uses: JamesIves/github-pages-deploy-action@v4.3.3
        with:
          branch: gh-pages
          folder: docs/.vitepress/dist
          # preserve old hash files, only when docs change, display commit message
          # defalt true, will automatically delete files
          clean: false
          # default true, will force-push and overwrite existing deployment
          force: false

部分心得

先按照VitePress官方教学写了如下npm scripts

{
    "deploy": "set -e && vitepress build docs && cd docs/.vitepress/dist && git init && git add -A && git commit -m 'deploy' && git push -f git@github.com:baicy/just-vue-tab.git main:gh-pages"
}

根据我几年前用hexo部署个博客没有自动化部署就再也不想写了的经验,CI是很重要的,根据VitePress官方文档就用起了Travis CI,文档全英文看了半天,设置了好多的key,然后发现它好像不给免费用了。

Google一番才知道现在Github Actions已经非常普及了,赶紧实(参)践(考)一下。

结果Github Action + Github Pages的实例我硬是没搜到,最后结合了Github Action前端VuePress自动化部署还得是阮一峰大佬的教学,比较满意的完成了文档的自动化部署。

本来想自己写命令行的,发现要考虑的确实比较多,也没有必要。

最终实现了main分支的文档有变化的时候提交gh-pages的效果。

另外这里犯了个大错误。

因为修改了参数,我还清空了gh-pages分支,Github Action不会提交hashmap.json文件,gh-pages一直构建失败。补上了就好了。不知道之后结构发生变化会不会出bug...

以前也用过jekenis和Devops平台,但都没有去搭建(的机会),简单的说自动化,那就是自动化,但你不去实践,真的只能一问三不知了。

ps: 我现在才知道github已经把master改成main了(???)

发布项目

npm发布

# 接入standard-version
pnpm i standard-version -D
# 登录 npm
npm add user
npm login
# 添加npm scripts
{
    "release": "standard-version && npm publish"
}

几个问题

  • npmjs的F2A太麻烦啦
  • 日志系统还没怎么研究,好像只会生成本地tag,不会进行真正的发布版本到github
  • 项目没有写entry,unpkg的CDN无效,不过这种项目用不用CDN呢(完全不知道

将changelog写入文档

# 修改deploy.yml
...
# install node & deps
...
# build vitepress docs
- name: Build Release Notes
  run: cp CHANGELOG.md docs/changelog.md
- name: Build VitePress
  run: npm run docs:build

# push actions
...

这个是不会改变git中changelog.md的内容的

项目官网/文档地址

后记

接下来准备引入一些规范和封装基础api了,如果需要的话。

虽然准备用Typescript,在项目中我也用了它一年(cv大法)……但我其实对它很陌生……

突然觉得这个项目无从下手了_(:з」∠)_