.flowconfig [options]
豐富多元的 Flow options
Last updated
Was this helpful?
豐富多元的 Flow options
Last updated
Was this helpful?
.flowconfig 中的 [options] 項目就是對 Flow 的各種設定 使用 key-value 一對一對的定義,像是這樣:
若是沒有被定義的項目則會使用預設值,
有些 options 選項可以在 flow 的 command line 中指定哦!像是 --lazy-mode
--temp-dir
等等的。
module.system.node.resolve_dirname
module.use_strict
munge_underscores
no_flowlib
react.runtime
server.max_workers
sharedmemory.dirs
sharedmemory.minimum_available
sharedmemory.hash_table_pow
sharedmemory.heap_size
sharedmemory.log_level
suppress_type
temp_dir
traces
strip_root
suppress_comment
types_first
well_formed_exports
設定為 true
的話會檢查專案下所有檔案,而不僅僅是標注了 // @flow
的檔案
預設值是 false
。
預設是 false
設定為 true
的話 Flow 在忙碌的時候會出現一些 emoji 表情符號
預設是 false
預設為 false
設定為 true
的話,Flow 會限制我們不可以改變 function 接收到的參數,也就是把每個接收到的參數都當成 const
。
預設為 false
( 看起來這個在未來專案內都可以考慮設定為 true
^^ )
設定為 true
的話 Flow 的 command line 訊息將會包含 warning 訊息,
預設是不顯示的 ( 如果要看 warning 訊息的話,透過 IDE 的整合介面顯示是比較舒服的哦! )
執行 flow
或 flow status
指令進行除錯就可以看到 warning 訊息囉!!
預設為 false
。
todo...
指定 log 檔案存放位置
預設在 /tmp/flow/<escaped root path>.log
像是我有一個 Flow 專案叫 flow-test,他就存了一個 log 檔叫做
zSUserszSwaynezSwszStmpzSflow-test.log
看不太懂齁~ 把 zS
換成 /
去掉就會變成 /User/wayne/ws/tmp/flow-test.log
了
我們知道 Flow 他是透過 // @flow
或 // @noflow
註解來決定是否為 Flow 檔案,進一步進行型別檢查。
但是 Flow 不可能無限的檢查下去,因此 Flow 有一個斷點機制
透過 max_header_tokens
,告訴 Flow 要往下檢查幾個註解
預設為 10
預設情況下 Flow 會去偵測以下副檔名的檔案 .js
, .jsx
, .mjs
, .cjs
還有 .json
, 我們可以透過定義 module.file_ext
來覆蓋原先的設定
像是這樣
這樣設定之後 Flow 就只會檢查 .foo
跟 .bar
檔了 ( 原先的 .js
, .jsx
... 就都不檢查了 )
Note: module.file_ext 是可以定義多行的!
設定為 true
的話 Flow 在檢查 require() 方法時會接受 string 以外的輸入
預設值為 false
指定一段正規表達式,當匹配到的時候會將匹配到的地方轉換為箭頭 ->
後方的字串。
像是這樣:
以上面的規則來說會將開頭為 img 匹配為 專案目錄下的 <PROJECT_ROOT>/src/img
目錄 之後不管在任何目錄下想要引入 <PROJECTROOT>/src/img
底下的資源只要這樣就好了
---
另外官網有給出一個範例是這樣的
接著再使用 require('image!foo.jpg')
會等同於使用 require('ImageStub')
這樣
恩... 這個我測試了很多次 都覺得範例中的正規表達式好像少了一個 .
再提個 ISSUE 去問一下吧!
永遠要記得 Flow 只是型別檢查,我們這邊的設定是型別會取用匹配檔案的而已,並不是真的引用到那個檔案, 設定了 Flow 的 module.name_mapper 之後,Webpack 之類的打包工具一樣要設定好才會是真的通哦!
指定副檔名匹配到另外指定的自串
這只是
module.name_mapper='^\(.*\)\.EXTENSION$' -> 'TEMPLATE'
的簡易寫法而已
使用範例:
這樣設定就會將所有副檔名為 .css
都匹配到 <PROJECT_ROOT>/src/CSSFlowStub.js.flow
這個檔案了
Note: module.name_mapper.extension 是可以定義多行的!
用於解析 import 跟 require 語法的系統,haste 是用在 React Native 的。 預設是 node
。
預設情況下 Flow 在引入第三方套件時會去查看套件中的 package.json
的 name 與 main 欄位來決定實際引入的檔案。
但我們還是可以透過以下設定覆蓋:
設定後 Flow 就會用這些指定的名稱去查看 package.json
。
以此案例來說,最終會引入 baz.js
作為 kittens 模組 Flow 型別的依據 ( 前提是 kittens 專案下有 baz.js
這個檔案 )
( 再次碎碎念: Flow 只是型別不是實際引入 )
如果沒有設定 module.system.node.main_field
的話 Flow 會使用 "main" 欄位作為依據
接下來說一下筆者實際使用的心得與注意事項
沒有設定就不會讀取 以上面的使用案例來說 我們只有指定 foo
, bar
, baz
所以一般非 Flow 專案使用的 "main" 就不會讀取到了,這樣會導致無法使用非 Flow 專案的第三方套件,甚至連沒有特別設定的 Flow 第三方套件都不能使用了...
永遠要指定 "main" 如上所述,不指定 "main" 的話會導致其他 package.json
沒有設定我們自己指定欄位的都錯掉,也就是一般的第三方套件都會錯光光了!
先到的先用,找不到就往下找 聽著繞口,以上面使用的為例
如果引入的套件 package.json
中沒有定義 "foo",那就會往下使用 "bar",如果也沒有 "bar" 就會繼續往下引用到 "baz",以此類推,所以筆者多次提到要指定 "main",就是為了避免這種錯誤發生。最好事在最後一行定義 "main"
Note: module.system.node.main_field 是可以定義多行的! Todo: 需要提個 ISSUE 問問官方 感覺順序跟官方描述有點反過來了...
設定為 warn
的話 Flow 會檢查是否在 class 中宣告實例成員
也可以設定為 ignore
叫 Flow 忽略不要檢查。
預設是 enable
,也就是允許使用的意思!
設定為 warn
的話 Flow 會檢查是否在 class 中使用 static 成員
也可以設定為 ignore
叫 Flow 忽略不要檢查。
預設是 enabel
,也就是允許使用的意思!
預設是 warn
,當我們在使用 decorator 的時候 Flow 會報錯。
也可以設定為 ignore
叫 Flow 忽略不要檢查這個語法,
或是設定為 warn
,讓 Flow 顯示警告訊息。
也可以設定為 ignore
叫 Flow 忽略不要檢查
設定為 warn
可以叫 Flow 顯示出警告訊息。
需要提出個 ISSUE,看起來預設值並不是 warn,而是 ignore 或 enable 才對
也可以設定為 ignore
叫 Flow 忽略不要檢查
設定為 warn
可以叫 Flow 顯示出警告訊息。 ( 目前實測有 bug ?? )
可能也需要提出個 ISSUE,看起來就算設定為 warn 也不會正確的跳出提示
設定為 true
將會只允許型別為 Array 的進行 JavaScript spread 動作 ( 也就是型別為 Map 或 Set 的都不行)。
這個的使用場景通常是 Babel 有開起來 的時候會比較有用。
顧名思義,若是設定為 true
的話,會預設要求精確匹配型別,( 參考 )
最後再來給大家看一下 當中是如何使用這段的吧!!
實測發現 esproposal 相關的設定在 Flow v1.135.0
版本之後就不再支援囉!
已經向社群提出 囉!
實測發現 esproposal 相關的設定在 Flow v1.135.0
版本之後就不再支援囉!
已經向社群提出 囉!
設定為 ignore
的話 Flow 會忽略檢查 JavaScript 的 decorator ( decorator 可以參考 )
實測發現 esproposal 相關的設定在 Flow v1.135.0
版本之後就不再支援囉!
已經向社群提出 囉!
設定為 enable
的話 Flow 會支援 export * as
這樣的語法 ( 參考 )
實測發現 esproposal 相關的設定在 Flow v1.135.0
版本之後就不再支援囉!
已經向社群提出 囉!
設定為 enable
的話 Flow 會支援 optional chaining 這樣的語法 ( 參考 )
設定為 enable
的話,Flow 會之支援 nullish coalescing 這樣的語法 ( 參考 )
實測發現 esproposal 相關的設定在 Flow v1.135.0
版本之後就不再支援囉!
已經向社群提出 囉!