热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

react源码剖析004关于范例搜检东西flow

Flow简介flow是facebook推出的js范例搜检东西。js是一门弱范例言语,没有从言语层面去保证变量范例不婚配的基础毛病。flow使得我们能够指定变量的范例,防止此类毛病的

Flow 简介

flow是facebook推出的js范例搜检东西。js是一门弱范例言语,没有从言语层面去保证变量范例不婚配的基础毛病。flow使得我们能够指定变量的范例,防止此类毛病的发作。

// @flow
function square(n: number): number {
return n * n;
}
square("2", "2"); // Error!

如图,运用flow以后,square函数的参数和返回值,都能够指定范例。当你在代码中写square(‘2’, ‘2’)的时刻,用flow敕令一搜检,不需要看营业逻辑,就晓得挪用的参数有毛病。

flow入门

  1. 新建项目,初始化flow设置

    mkdir flow-demo && cd flow-demo && mkdir src && mkdir lib

  2. 设置编译器

    yarn add --dev babel-cli babel-preset-flow

    此时会天生package.jsonyarn.lock文件。yarnnpm的替代品,能够加速npm模块的装置,而且能兼容大多数的npm敕令。yarn的官网移步这里。

    然后在根目次新建一个.babelrc文件,并设置flow作为presets

    {
    "presets": ["flow"]
    }

    个中"flow"就是指适才装置的babel-preset-flow的简写,省略了babel-preset-

    此时,你能够用以下敕令来做代码编译:

    yarn run babel src/ -D lib/

    固然,也能够将这个敕令设置到package.json文件中:

    {
    "name": "flow-demo",
    "main": "lib/index.js",
    "scripts": {
    "build": "babel src/ -D lib/",
    "prepublish": "yarn run build"
    }
    }

  3. 设置flow

    引荐将flow装置到当前项目目次,而不是全局装置。

    yarn add --dev flow-bin

    此时

    运转yarn run flow init天生设置文件.flowconfig
    运转yarn run flow举行代码搜检

    运转上述代码时会天生一个可复用的背景历程,以加速后续代码搜检的速率。

    注重上面两敕令都带上yarn run flow,而不是直接运转flow。区别是yarn run flow挪用了本项目中flow-bin的flow敕令。

    别的,npm上有一个flow,和这里面的flow是完整不相关的,不能殽杂。

    停用flow背景历程,运用flow stop

    以上示例的源码。

flow设置文件.flowconfig

这部份将连系react的.flowconfig和flow官方文档举行剖析。

flowconfig也许遵照INI文档花样。一个.flowconfig文件,能够包含下以五个部份:

[include]
[ignore] 用正则表达式婚配文件或目次,满足前提的将被flow疏忽;示意项目根目次
[libs]
[options]
[version]

[ignore]

[ignore]
# Ignore Docs
/docs/.*
/.*/docs/.*

react的ignore部份,都运用了这类绝对路径的写法。在设置中运用解释,能够在行首加#号。

[ignore]
/.*/node_modules/y18n/.*

不清楚为何react只将node_modules下的y18n疏忽,而不是将全部node_modules目次疏忽?(TODO)

[libs]

[libs]
./node_modules/fbjs/flow/lib/dev.js
./flow

dev.js只要一行代码:declare var __DEV__: boolean;, react跨项目援用一行代码可见flow项目几乎就是应react而生。

说到[libs],就必须要说一说flow的一个主要观点:flow library definition。一个flow library definition文件(简称libdef),就类似于C++中的头文件,是用来定义跨项目可用的全局变量。能够定义全局的Function/Class/Variables/Type/Module。详见flow文档。

TODO: flow为何要支撑libdef?又是怎样运用libdef文件的?

[options]

[options]
# 可选项node|haste,haste已不再被保护,可react还在用
module.system=haste
# 许可在class中运用static关键字
esproposal.class_static_fields=enable
# 许可在class中运用instance关键字
esproposal.class_instance_fields=enable
# 不许可在class中运用下划线作为私有函数
munge_underscores=false
# 束缚的范例,能够用来替代TODO
suppress_type=$FlowFixMe
# 这个正则是什么寄义?TODO
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-3]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*www[a-z,_]*\\)?)\\)

[version]

[version]
^0.41.0

此version是指flow-bin的版本,能够用yarn run flow version检察。


推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • Webpack 初探:Import 和 Require 的使用
    本文介绍了 Webpack 中 Import 和 Require 的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
author-avatar
尘世聚散
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有