Flowを Vue 2 webpack-templateに追加しようとしています。記録のために、私はランタイムのみを使用しています(ファイルは.vue
フォーマット/標準に従います)。
.vue
私の最初の試みは、cli を介してフローを使用することでしたが、ファイルの処理方法がわからないため、機能しないことに気付きました。
私の2番目の試みは、webpackローダー(つまり、 flow-status-webpack-plugin)を追加し、ビルドの一部としてフローチェックを実行することでした(eslint
たとえば、作品のように)。うまくいかなかったので、他のオプションを検討しました。
私の 3 回目の試みは、最初はかなり成功した、babel プラグインを使用することでした。babel-plugin-typecheck + babel-plugin-syntax-flow を使用しました。Webpack には出力はありませんが、型エラーによりアプリが壊れます。私はこのアプローチで問題ありません。CI で問題なく動作し、ビルドが壊れます。
これが私の.babelrc
見た目です:
{
...
"plugins": [
...
["typecheck", {
"disable": {
"production": true
}
}],
"syntax-flow",
"transform-flow-strip-types"
],
...
}
この時点で、フローはグローバル メソッドに対して期待どおりに機能しますが、Vue コンポーネント内では機能しません。
<template>...</template>
<script>
/* @flow */
const flowIt = (a: number): number => {
return a * 10
}
flowIt(20)
flowIt('bah') // Uncaught TypeError: Value of argument "a" violates contract. Expected: number Got: string
export default {
mounted: function () {
flowIt(20)
flowIt('bah') // Sees nothing wrong here
}
}
</script>
<style>...</style>
その上で、目標は Flow のためにアプリ コードを変更しないことです。理想的には、Vue を通常どおり使用するだけです。
<template>...</template>
<script>
/* @flow */
export default {
methods: {
flowIt (a: number): number {
return a * 10
}
},
mounted: function () {
this.flowIt(20)
this.flowIt('bah') // Should throw a type error.
}
}
</script>
<style>...</style>
Flow での私の経験と同じように、これが Vue と関係があるかどうかはわかりません (ヒント: それほど経験がありません)。Vue コンポーネントがどのように構成されているかを Flow に「理解」させるタイプ ファイルが必要だと考えています (ディレクティブについても同様です)。
経験豊富な方へ、どのようにして Flow を Vue + webpack で適切に動作させましたか?