Vue项目中使用flow做类型检测的方法


Posted in Javascript onMarch 18, 2020

在vue2.0的项目中加入flow类型检查。当前项目是用js写的,当项目越来越大,由于js弱类型的特性,相比ts(typescript)这种强类型的语言而言,后期维护会越来越困难。为了解决这个问题,决定使用flow 加入类型检查。

flow了解

flow是fackbook公布的javascript静态类型检查器。 可以检查js中一些bug,eg:自动类型转换中出现的问题。flow官网

首先,安装flow

npm i flow-bin --save-dev

然后在package.json中添加脚本

"scripts": {
  "flow": "flow check"
 }

在项目根目录下运行命令,生成文件.flowconfig

npm run flow init

打开 .flowconfig 文件,可以看到内容大致如下

.*/node_modules/.*
.*/test/.*
.*/build/.*
[include]
[libs]
[lints]
[options]
module.file_ext=.vue 
module.file_ext=.js
[strict]

其中在[ignore]下配置要忽略的文件,在[options]中我们可以添加
module.file_ext=.vue 这样的配置让flow检测vue单文件组件

  • [ignore]:Flow 默认检查项目目录下所有文件,但是有很多文件必定是我们不想检查的,就像 node_modules、build 等目录下的文件,所以我们需要在将这些目录写在 ignore 配置下。
  • [include]:所谓的项目目录其实是 .flowconfig 目录,并不是真正的项目目录,如果我们在这个项目中的某个目录下创建一个 .flowconfig,那么 .flowconfig 所在的目录也会变为一个 Flow 项目。那么,如果我们想对当前 Flow 项目以外的文件或者目录进行检查,需要把它们写在 include 配置项中。
  • [libs]:在项目中,我们可能会用到很多自定义的类型,比如说要记录对象的结构,它可能在每个文件中都会被运用到,我们将其抽取为全局的类型或数据结构,在任何文件都可以使用。为了管理方便,我们将全局类型都定义在一个或多个单纯的目录中统一管理。这里存放的有可能是一个定义好的数据结构,存放的也有可能是根据项目中某个类对应的数据类型。我们将这些文件或目录写在 libs 配置项中,这个配置对于我们使用 Flow 来说很重要。
  • [options]:这里填写对 Flow 项目的一些配置,配置项以key=value的形式,每行写一个。所有的配置见官方文档
  • [lints]:官网中没有提到 lints 相关的配置

然后,在需要flow进行类型检测的.js文件或.vue文件script标签内容最顶部,加上注释

// @flow

没有该注释对文件将不会进行类型检测

配置到到这里,我们可以运行 npm run flow 进行代码到类型检查,获取检查报告。

由于类型注释不是我们ES规范的一部分,因此我们需要把使用了flow的代码转换成正常的js代码,可以使用babel-preset-flow或babel-plugin-transform-flow-strip-types来移除它。

安装flow相关的flow插件:
babel-cli: babel-cli脚手架
babel-preset-flow: 用于编译前去除代码中的类型声明
babel-plugin-transform-flow-strip-types 同上,而选一

npm install --save-dev babel-cli babel-preset-flow

安装完后,在项目根目录的.babelrc文件(无则创建)里添加如下内容

{
 "presets": [
  ["env", {
   "modules": false,
   "targets": {
    "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
   }
  }],
  "stage-2",
  "flow"
 ],
 "plugins": [
  //"babel-plugin-transform-flow-strip-types"
 ]
}

如果想要在代码中实时看到flow类型检查的错误,需要安装eslint插件

npm i eslint-plugin-flowtype-errors --save-dev

然后在.eslintrc文件中添加配置:

{
 plugins: [
  'flowtype-errors'
 ],
 rules: {
  "flowtype-errors/show-errors": 2
 }
}

PS:在vscode中进行类型声明时可能会报"类型声明只能在.ts文件中使用"的错误,这时候找到setting,搜索javascript.validate,将其禁用即可

参考文章:Writing Vue.js Components with Flow

到此这篇关于Vue项目中使用flow做类型检测的方法的文章就介绍到这了,更多相关Vue flow 类型检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
解析JavaScript中点号“.”的多义性
Dec 02 Javascript
jquery实现点击弹出层效果的简单实例
Mar 03 Javascript
js判断字符长度及中英文数字等
Mar 19 Javascript
当达到输入长度时表单自动切换焦点
Apr 06 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
vue v-on监听事件详解
May 17 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
JavaScript数组的5种迭代方法
Sep 29 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 04 Javascript
JavaScript正则表达式验证登录实例
Mar 18 #Javascript
JS正则表达式验证密码强度
Mar 18 #Javascript
原生js实现密码强度验证功能
Mar 18 #Javascript
JavaScript实现密码强度实时验证
Mar 18 #Javascript
js如何验证密码强度
Mar 18 #Javascript
js验证密码强度解析
Mar 18 #Javascript
js实现超级玛丽小游戏
Mar 18 #Javascript
You might like
咖啡的传说和历史
2021/03/03 新手入门
php递归列出所有文件和目录的代码
2008/09/10 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
animate.css在vue项目中的使用教程
2018/08/05 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
Python利用递归实现文件的复制方法
2018/10/27 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
python实现计算图形面积
2021/02/22 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
供货协议书
2014/04/22 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
爱心捐书倡议书
2015/04/27 职场文书
认识实习感想
2015/08/10 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书