Flow 起步

为了示范如何将 Flow 应用到项目,我们就来一个 npm 项目作例子吧

首先,创建一个名为 “get_started” 的项目:

$> mkdir -p get_started
$> cd get_started
$> echo '{"name": "get_started", "scripts": {"flow": "flow; test $? -eq 0 -o $? -eq 2"}}' > package.json

接着,加入 Flow

$> touch .flowconfig
$> npm install --save-dev flow-bin

然后就开始写代码

index.js

// @flow


var str = 'hello world!';
console.log(str);

注意第一行,我们添加了 // @flow,用来告诉 Flow 你得检查我这个文件。如果不加这个注释, Flow 就认为这个文件还没准备好,先不检查它

好了,现在运行 Flow 看看它怎么说

$> npm run-script flow

> test@ flow /get_started
> flow

No errors!

唉妈呀! No errors! 好的, 那咋们就给它弄点小错误看看:

index.js

// @flow

var str: number = 'hello world!';
console.log(str);
$> npm run-script flow

> test@ flow /get_started
> flow 2> /dev/null

index.js:3
  3: let str: number = 'hello world!';
                       ^^^^^^^^^^^^^^ string. This type is incompatible with
  3: let str: number = 'hello world!';
              ^^^^^^ number


Found 1 error

牛B – Flow 知道我们将 string 类型的值赋值给 number 类型,并且给出了错误

在修复这个类型错误前,我们先添加 Babel 插件,然后试着运行代码

$> npm install -g babel-cli
$> npm install --save-dev babel-plugin-transform-flow-strip-types
$> echo '{"plugins": ["transform-flow-strip-types"]}' > .babelrc

现在我们可以试着运行代码,不用管之前 Flow 给出的错误,看下结果

$> babel-node index.js
hello world!

你看,还是能跑的呀!Flow 虽然给出了类型错误提示,但是它不会禁止代码运行。当然,按照最佳实践, 如果有类型错误的话就绝不发布,不过在开发阶段,即便还没完美解决 Flow 的提醒,你还是会经常运行代码的( 特别是 调试/随机测试 )。这就是 Gradual typing 的好处之一,Flow 的设计如此,让你在开发期间,不受到任何耽误

注意,我们运行代码的时候,使用的命令是 babel-node 而不是 nodebabel-node 包含在 babel-cli 库,其实就是在 node 上包了一层, 在原来的 node 执行前拦截代码并转换成合适的格式

查看 Running Flow Code 部分, 了解如何更好的编译和发布 Flow 代码到 npm 和 生产环境

下一步#

现在我们知道怎么添加 Flow 了,接下来快速看下 一些例子代码 ,也保存在 Flow 仓库:

  1. Hello Flow!
  2. Adding type annotations
  3. Nullable types
  4. Arrays
  5. Dynamic code

Next →

You can edit this page on GitHub and send us a pull request!