Update flowconfig (read notes for the detail)
Update flowconfig (read notes for the detail)

flow는 기본적으로 '.flowconfig' 파일이 있는 디렉토리 밑에있는 모든 '.js'
파일을 재귀적으로 탐색합니다. 그중엔 'node_modules' 디렉토리도
포함되어있습니다.

사실 이건 의도된 동작입니다. 기존의 TypeScript는 사용하는 모든
라이브러리에 대한 interface declaration 파일 (.d.ts)을 요구하기때문에
매우 불편했었습니다. 프로그래머는 라이브러리를 include 할때마다 매번
d.ts 파일을 찾아서 넣어줘야했고, d.ts 파일이 없으면 손으로 만들어야만
했었습니다. 저는 이때문에 TypeScript를 때려치웠습니다.

flow는 그 대신에 'node_modules' 디렉토리를 자동으로 뒤져줍니다.
node_modules 안에 있는 코드들을 모두 트랙해서, 소스코드에서 require나
import 문을 쓸경우 자동으로 node_modules 안에서 그 라이브러리가 있는지
없는지 검사해주기때문에 매우 편리합니다.

그리고 만약 node_modules 안에있는 소스코드가 `// @flow` 어노테이션을
포함하고있을경우 아예 그 라이브러리를 타입추론과정에 포함시켜버려서,
declaration 파일을 손으로 만들지 않더라도 자동으로 declaration 파일이
만들어진것과 같은 효과를 냅니다.

그래서 원래라면 정말 훌륭해야했습니다. 근데 지금 그렇지가 못합니다.

아직 flow는 pre 1.0 입니다. (0.20) 하위호환성을 깨는 업데이트가 몇번
있었고, 이전에는 통과했던 코드가 flow가 업데이트되면서 깨지는 경우가
있었습니다.

하위호환성 breakage의 제일 대표적인 예시가 Flow Comment 입니다.
(http://flowtype.org/blog/2015/02/20/Flow-Comments.html) 0.18 이전만
하더라도 flow는 `// @flow`가 없는 js파일에 대해선 아무 조치도 취하지
않았었는데, 지금은 합니다. Flow Comment를 이용한 타입체크를 만들었고요,
그덕분에 `// @flow`를 붙이지도 않았는데도 지멋대로 타입체크를 수행하다가
실패하는 경우가 종종 발생합니다.

그래서 node_modules 안의 코드를 전부 타입체크하면, 고칠수도 없는데
라이브러리가 타입체크 실패하는 경우가 발생합니다.

아직까지는 위의 이유 외에, node_modules 안의 코드를 전부 체크하는것이
문제를 일으키는 시나리오는 보지 못했습니다. 사실상 하위호환성이
깨지는것이 문제의 거의 대부분이기때문에 이와같은 현상은 일시적인
현상입니다. flow 1.0이 출시되고, 하위호환성이 유지되기 시작하면 이와같은
고통은 사라질것으로 보이네요. 하지만 지금은 어쩔수없이, 타입체크에
실패하는 몇몇 라이브러리들을 손으로 거를수밖에 없게 되었습니다.

References

- https://github.com/facebook/node-haste
- https://github.com/facebook/flow/issues/978
- https://github.com/facebook/flow/issues/1180
- http://flowtype.org/blog/2015/02/20/Flow-Comments.html

bacchus-snu/password,bacchus-snu/password,bacchus-snu/password