上一篇已经把vite插件的基础结构搭建起来了,这一次就来聊聊继续完善开发环境。

完善开发环境

生成d.ts文件

先来修改一下lib/index.ts这个文件

export interface userOptions {
name: string;
age: number;
base?: string;
} export function handleOptions(options?: userOptions): string {
return `${options.name || "小明"}今年${options.age},主页${
options?.base || "/"
}`;
}

在执行 yarn build,不出所料是打包成功了,然后新建一个文件a.js导入dist/index.js这个文件,也能够正常使用,但是又发现一个问题,貌似没有只能提示,完全不知道options可以传入哪些参数,这就有点不满意了,对标一下@vitejs/plugin-vue是有提示的。

原因尼也能简单,就是tsup打包的时候没有生成.d.ts的类文件。翻了下文档tsup自带了生成类文件的功能。有个参数是--dts

所以来改造一下命令

{
"build": "tsup ./lib/index.ts --dts"
}

运行一下发下会多一个index.d.ts的文件,测试一下,随便新建一个js文件

发现也有提示了,完美

创建一个git仓库

到这里也配置了有点东西了,后面的东西还需要git仓库的支持,所以先搞一个git仓库把代码提上去。

好像还没有配置.gitignore,把example当中的.gitignore移动到根目录来

node_modules
.DS_Store
dist
dist-ssr
*.local

配置开发规范

虽然啥都还没有,但是逼格不能少,万一用的人多了,给你提个pr什么的,没有一个严格的规范就很难受。并且只靠文档去规范是不现实的,所以必须在提交前代码去验证,不合格直接不让提交。

commit规范

先从简单的commit规范开始吧,细致了解可以瞅瞅这篇文章如何规范你的Git commit?

这里就要用到commitlint这个插件了,不啰嗦直接安装没啥难度

yarn add @commitlint/config-conventional @commitlint/cli husky -D -W
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

注意这个是安装在外层的monorepo这个库里面,因为无论改任何文件,只要提交我们都要校验commit msg

在scipts中在添加一条命令

{
"prepare": "husky install"
}
yarn prepare
# 把commitlint添加到git钩子中
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'

最后提交一下 git commit -m 'xxx' 只要不按照规范,就会抛出异常

列举一下插件的作用

  • commitlint 检测commit msg是否规范
  • husky git hooks,有了才能完善后面的,提交之前自动格式化代码,检测代码是否规范

又完成了一个小目标,完美

代码规范

代码规范有两部分,一个是eslint检查代码异常,另外一个是prettier代码格式的检查。

在配置之前先来避个坑,现在项目的packages有2个,最开始我是把eslint和prettier分别写在examplevue-docs里面的,想的是一个vue的文件多,一个纯ts,这样就可以不同的项目用不同的方案。完了之后发现我就是个憨憨,写在最外层,做代码检查的时候直接就一起做了,并且是可以支持:针对不同的文件类型执行不同的检查方案。

先来配置eslint

yarn add -D typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint -W

配置.eslintrc

{
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"rules": {},
"extends": [
"plugin:@typescript-eslint/recommended"
]
}

因为核心代码是ts所以要用到s的插件这两部很简单在@typescript-eslint/eslint-plugin的官网上抄下来就行了。@typescript-eslint/eslint-plugin

来验证一下,在vue-docs/lib/index.ts,写点错误代码

编辑器报错了,不要激动,还没完。这里有个坑,如果你的编辑器不是用的项目中的.eslintrc配置,这个测试是没用的,所以还需要执行下一步

npx eslint packages/vue-docs/lib

看下是否报错

如果看到的是这样的才能代表成功,又一个功能点完成了

配置prettier

这个也很简单从官网抄就行了eslint-plugin-prettier

yarn add eslint-plugin-prettier prettier -D -W

修改.eslintrc,新增如下

{
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error"
}
}

在来安装一个推荐配置

yarn add eslint-config-prettier -D -W

完整的.eslintrc配置

{
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint",
"prettier"
],
"rules": {
"prettier/prettier": "error"
},
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
]
}

最后来测一测,这个测试就很简单了随便用记事本改一下格式,然后执行

npx prettier --write packages/vue-docs/lib

格式是不是有回到熟悉的样子了。

最后把2条命令加入到scripts中

{
"lint": "eslint packages/vue-docs/lib",
"fix": "prettier --write packages/vue-docs/lib "
}

到这里尼,基本的代码规范就有了。那么如何把代码规范和git结合到一起尼,下次再见。

最后再来推广一波

【记录】如何造一个vite插件(2)的更多相关文章

  1. 【记录】如何造一个vite插件(1)

    在看文章前,先做个定位,这不是一篇纯粹的技术性文章,可以把它理解成一个叙述文章,记录我开发插件的过程. 开始前简单的吹个牛 vue2 也写了很多年了,多人合作始终避不开用到别人的组件.关键是有些组件没 ...

  2. 第一个Vue插件从封装到发布

    前言 这是我封装的第一个Vue插件,实现的功能是滑动选择省市区,虽然只是一个简单的插件,但还是挺开心的,记录一下步骤. 插件地址:https://github.com/leichangchun/vue ...

  3. 你真的需要一个jQuery插件吗

    jQuery的插件提供了一个很好的方法,节省了时间和简化了开发,避免程序员从头开始编写每个组件.但是,插件也将一个不稳定因素引入代码中.一个好的插件节省了无数的开发时间,一个质量不好的插件会导致修复错 ...

  4. 手把手教你实现一个支持插件化的 uTools 工具箱(一)

    前言 对于前端同学来说,我们会经常用到各种小工具,比如:图床.颜色拾取.二维码生成器.url 管理.文本比对.json 格式化.当然我们可以 chrome 收藏夹来管理各种在线的小工具,但作为一个有追 ...

  5. 动手做第一个Chrome插件

    Chrome插件是令人惊讶的简单,一旦你弄懂它的工作和实现原理.它是由一部分HTML,一部分Js,然后混合了一个叫做manifest.json的Json文件组合而成的整体.这意味着你可以使用你最擅长的 ...

  6. 哇 真的是一个好插件!!!Sublime Text编辑文件后快速刷新浏览器

    http://9iphp.com/web/html/sublime-text-refresh-browser.html这篇博文咯 来源:[Tips]Sublime Text编辑文件后快速刷新浏览器 - ...

  7. 如何自己编写一个easyui插件续

    接着如何自己编写一个easyui插件继续分享一下如何从上一节写的“hello”插件继承出一个“hello2”. 参考了combobox的源码中继承combo,当然我这个简单很多了.都是根据自己的理解来 ...

  8. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  9. 【转】怎样创建一个Xcode插件(Part 1)

      原文:How To Create an Xcode Plugin: Part 1/3 原作者:Derek Selander 译者:@yohunl 译者注:原文使用的是xcode6.3.2,我翻译的 ...

随机推荐

  1. Keil MDK5 安装教程(附安装包百度云)

    关注微信公众号"龙行单片机",后台回复"安装包"获取最新安装包百度云链接. 1.MDK5.11a 安装 双击 mdk511a.exe,进行安装.这里我们将其安装 ...

  2. 将视频插入视频:CVPR2019论文解析

    将视频插入视频:CVPR2019论文解析 Inserting Videos into Videos 论文链接: http://openaccess.thecvf.com/content_CVPR_20 ...

  3. CodeGen融合核心关系循环扩展

    CodeGen融合核心关系循环扩展 Expansion Tokens <HARMONYCORE_RELATION_NAME> 插入当前关系的名称.关系名称将自动生成,但可以由Harmony ...

  4. springmvc自定义的拦截器以及拦截器的配置

    一.自定义拦截器 Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口. 二.HandlerIn ...

  5. 为IHttpClientFactory添加动态命名配置

    某些时候我们需要为HttpClient动态配置一些东西, 例如证书等, 参考博问 如何使用IHttpClientFactory动态添加cer证书. 例如服务是一个回调服务, 而被回调方采用了自定义的h ...

  6. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  7. UF_CSYS 坐标系操作

    Open C   UF_CSYS_ask_csys_info               获取WCS坐标系的原点坐标和矩阵标识UF_CSYS_ask_matrix_of_object    获得对象 ...

  8. PTA题目集7-9总结

    PTA题目集7-9总结 一.前言 题目集七:该题集为轮到图形卡片排序游戏题,主要考查的知识点有类的继承,ArrayList泛型的使用,Compabale接口的运用,多态的使用方法以及接口的应用,难度较 ...

  9. 9种设计模式在Spring中的运用,一定要非常熟练

    1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory.Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数 ...

  10. 有模有样解决Flutter里Webview无法访问HTTP页面的问题

    探索过程 Android9(好像是吧)开始谷歌就默认不让开发者访问不安全HTTP内容了,如果非要用HTTP,那必须在networkSecurityConfig里配置cleartextTrafficPe ...