1 Star 0 Fork 0

徐轲/vuecli5-template-ts

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
4年前
Loading...
README

依赖安装

代码提交规范

commitizen

commitizen是一个 cli 工具,用于规范 git commit 信息,可以代替 git commit

Conventional Commits 规范定义的 Type 类型

Type Description
feat 新增 feature
fix 修复 bug
docs 仅仅修改了文档,比如:README、CHANGELOG、CONTRIBUTE 等等
style 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
refactor 代码重构,没有加新功能或者修复 bug
perf 优化代码方面,比如提升性能、体验
test 测试用例,包括单元测试、集成测试等
chore 改变构建流程、或者增加依赖库、工具等

安装 commitizen

pnpm i commitizen -D

安装 conventional-changelog-cli 生成提交日志 从 git metadata 生成变更日志

npx i conventional-changelog-cli -D

安装 lint-staged

Lint-staged 可以在 git staged 阶段的文件上执行 Linters,简单说就是当我们运行 ESlint 或 Stylelint 命令时,可以通过设置指定只检查我们通过 git add 添加到暂存区的文件,可以避免我们每次检查都把整个项目的代码都检查一遍,从而提高效率。

其次,Lint-staged 允许指定不同类型后缀文件执行不同指令的操作,并且可以按步骤再额外执行一些其它 shell 指令。

安装依赖

pnpm i @commitlint/cli @commitlint/config-conventional -D

新版 husky 的工作原理

新版的 husky 使用了从 git 2.9 开始引入的一个新功能 core.hooksPath。core.hooksPath 可以让你指定 git hooks 所在的目录而不是使用默认的.git/hooks/。这样 husky 可以使用 husky install 将 git hooks 的目录指定为.husky/,然后使用 husky add 命令向.husky/中添加 hook。通过这种方式我们就可以只添加我们需要的 git hook,而且所有的脚本都保存在了一个地方(.husky/目录下)因此也就不存在同步文件的问题了。

  1. 安装 husky

pnpm i husky -D

  1. 在 packgae.json 中添加 prepare 脚本
{
  "scripts": {
    "prepare": "husky install"
  }
}

prepare 脚本会在 pnpm install(不带参数)之后自动执行。也就是说当我们执行 pnpm install 安装完项目依赖后会执行 husky install 命令,该命令会创建.husky/目录并指定该目录为 git hooks 所在的目录。

此命令如果不执行,git commit 钩子将不存在也就不会触发 commit 校验

only-allow

only-allow 来规范团队的包管理工具

以我当前所在的项目组为例,有四个前端开发工程师。每个人在安装依赖的时候方式不一,我习惯用 cnpm install,别人习惯用 yarn install 或 npm install。这样的场景下,可能存在每个人所处的开发环境的依赖包不同。因此,可以试图用工具去规范团队: only-allow 。

只需在 package.json 中加入一行代码来限制,如下含义:只允许使用 npm 来进行安装

npx only-allow [method](method 可取值:npm | yarn | pnpm)

{
  "scripts": {
    // ... 其他命令
    "preinstall": "npx only-allow pnpm" // 使用pnpm作为包管理工具
 }
}

preinstall 是包安装工具的 钩子函数,在上例中作为 install 之前的拦截判断

其他钩子如下:

# install 之前触发
preinstall

install

# install 之后触发
postinstall

当配置了当前项目只能通过 pnpm 来安装依赖时,如使用yarn install来进行安装,终端会报错。并终止安装进程,应使用pnpm install来安装本项目的依赖

至此,便达到规范一个项目内使用相同包管理工具的目标

项目优化

vuecli 的预加载

删除预加载

vuecli 的预加载功能是默认开启的。

module.exports = {
  chainWebpack(config) {
    // 移除 prefetch 插件
    // prefetch 加载其他页面资源,空闲时加载,不一定会加载
    config.plugins.delete('prefetch');
    // 删除文件预加载
    // preload 加载当前页面的资源,一定会加载,在渲染前加载
    config.plugins.delete('preload');
  },
};

prefetch,preload 使用的必要性

prefetch 预加载是不会影响当前页面的加载性能的,因此预加载是可以被保留的,什么情况下我们需要禁用预加载呢?对流量损耗敏感(移动端)的应用场景,在首页对子页面进行全面的预加载,而用户可能只需要跳转其中的一两个子页面甚至停留在首页,造成大量的流量浪费。需要做到控制特定的路由预加载。首先,先移除 prefetch 插件,然后按需添加预加载。

import(/* webpackPrefetch: true */ './componentA.vue');

preload 用于提高资源加载的优先级,当页面开始加载时,我们总是想核心的代码或资源得到优先处理,因此可以通过 preloading 提高优先级。

import(/* webpackPreload: true */ 'lbrary');

错误的使用 webpackPreload 实际上会影响性能,因此要谨慎使用。

如果把一个体积巨大的资源放在最高优先级加载,页面可能会长时间空白,用户体验体验非常差,因此,慎用。

优化点:懒加载优化了首屏加载的速率,prefetch 预加载优化了子页面加载的速率

打包预览文件大小

安装插件 pnpm i webpack-bundle-analyzer -D

moment 优化

如果项目中用到了 moment 这个库,打包出来的文件会比较大,可通过以下方式进行优化,排除比重比较大的 moment 库中的多语言文件。

const webpack = require('webpack');

module.exports = {
  chainWebpack: config => {
    config
      .plugin('ignore')
      .use(new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/));

    return config;
  },
};

babel

  1. 使用 babel-plugin-import 插件,支持 ant-design-vue 按需引入;

  2. 使用 @vue/babel-plugin-jsx 插件,让 vue 支持 jsx;

  3. 使用 @babel/plugin-proposal-optional-chaining 插件,让浏览器支持实验阶段的 es 可选链 新语法

  4. 使用 @babel/plugin-proposal-nullish-coalescing-operator 插件,让浏览器支持实验阶段的 es 零合并操作符

script 命令

{
  scripts: {
    // 初始化项目 安装依赖
    bootstrap: 'pnpm install',
    // 启动项目
    dev: 'pnpm run serve',
    serve: 'vue-cli-service serve',
    // 测试环境打包
    'build:test': 'vue-cli-service build --mode=test',
    // 预发环境打包
    'build:preview': 'vue-cli-service build --mode=test preview',
    // 生产环境打包
    'build:production': 'vue-cli-service build',
    // 打包查看项目各个包资源的分布于大小
    'build:test:report': 'vue-cli-service build --mode=test --report',
    // 格式化项目代码
    lint: 'vue-cli-service lint',
    log: 'conventional-changelog -p angular -i CHANGELOG.md -s',
    'lint:eslint': 'eslint --cache --max-warnings 0  "{src,mock}/**/*.{vue,ts,tsx}" --fix',
    'lint:prettier': 'prettier --write  "src/**/*.{js,json,tsx,css,less,scss,vue,html,md}"',
    'lint:lint-staged': 'lint-staged',
    // 限制项目的依赖安装通过 pnpm 来下载和管理
    preinstall: 'npx only-allow pnpm',
    // 安装 husky 工具
    prepare: 'husky install',
  },
}

空文件

简介

使用vuecli5、vue3、pinia、tailwindcss、axios和ant-design-vue组合成的一套开箱即用的模板项目 展开 收起
取消

发行版

暂无发行版

贡献者 (1)

全部

近期动态

接近3年前推送了新的 multipage 分支
接近3年前推送了新的提交到 master 分支,56216fd...c52d97c
接近3年前推送了新的提交到 master 分支,aa5e06a...56216fd
接近3年前推送了新的提交到 master 分支,6e0bb30...aa5e06a
接近3年前推送了新的提交到 master 分支,5955dfe...6e0bb30
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/fslfsl/vuecli5-template-ts.git
git@gitee.com:fslfsl/vuecli5-template-ts.git
fslfsl
vuecli5-template-ts
vuecli5-template-ts
master

搜索帮助