2015-12-01 12 views
6

क्या यह मौजूदा, बड़ी परियोजना में Flowtype जोड़ने के लिए व्यवहार्य है?किसी मौजूदा प्रोजेक्ट में प्रवाह जोड़ना

मैं एक एकल .js फाइल करने के लिए /* @flow weak */ जोड़ा, और फिर flow check भाग गया और यह समारोह की टन है, क्योंकि यह पता नहीं क्या उनमें से किसी को कर रहे हैं परिभाषित libs लिए विश्व स्तर पर कॉल पर प्रकाश डाला है। तो मैं इस तरह देखने के लिए मेरी .flowconfig फ़ाइल अद्यतन:

[ignore] 
node_modules/ 
bower_components/ 
typings/ 

[include] 
twig/ 

[libs] 
bower_components/timezone-js/src/date.js 
bower_components/jquery/dist/jquery.js 
bower_components/jquery-migrate/jquery-migrate.js 
bower_components/jquery-ui/jquery-ui.js 
bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.js 
bower_components/jquery-cookie/jquery.cookie.js 
bower_components/jquery.expander/jquery.expander.js 
bower_components/jquery.transit/jquery.transit.js 
www/js/select2.js 
bower_components/fancybox/source/jquery.fancybox.pack.js 
bower_components/lodash/lodash.js 
bower_components/underscore.string/lib/underscore.string.js 
bower_components/json2/json2.js 
bower_components/jquery-validation/dist/jquery.validate.js 
bower_components/jquery-file-upload/js/jquery.iframe-transport.js 
bower_components/jquery-file-upload/js/jquery.fileupload.js 
bower_components/DataTables/media/js/jquery.dataTables.js 
bower_components/jquery.taps/jquery.taps.js 
bower_components/file-saver.js/FileSaver.js 
bower_components/react/react.js 
bower_components/react/react-dom.js 
bower_components/react/react-dom-server.js 
node_modules/babel-core/external-helpers.js 
node_modules/babel-core/browser-polyfill.js 
... more libs ... 

[options] 
munge_underscores=true 

और अब यह सिर्फ जब मैं flow check चलाने की स्मृति समाप्त चलाता है।

तो, फिर क्या? क्या मेरा प्रोजेक्ट प्रवाह का उपयोग करने के लिए बहुत बड़ा है?

+1

आईएमओ प्रवाह व्यवहार्य नहीं है जब तक [इस मुद्दे] (https://github.com/facebook/flow/issues/869) हल हो गया है। – mpen

उत्तर

13

.flowconfig में पथ पूर्ण पथ पर नियमित अभिव्यक्तियां हैं। तो, node_modules के अंतर्गत सब कुछ ध्यान न दें और bower_components करने के लिए आप कुछ इस तरह का प्रयोग करेंगे:

[ignore] 
.*/node_modules/.* 
.*/bower_components/.* 

[libs] अनुभाग declarations (इंटरफ़ेस फ़ाइलें) प्रवाह करने के लिए पथ में शामिल है, जो जगह है जहाँ आप में वैश्विक के लिए प्रकार को परिभाषित अपने एप्लिकेशन। आप एक निर्देशिका है जहाँ आप अपने सभी इंटरफेस फ़ाइलें रखने के लिए इस बात सकता है:

declare module "jQuery" { 
    declare function $(element: any): any; 
} 

ध्यान दें कि हम any उपयोग किया है:

[libs] 
.*/lib/interfaces/.* 

उदाहरण के लिए, jQuery के लिए, आप निम्न घोषणा हो सकता था प्रकार, जो प्रभावी रूप से इस तर्क या वापसी प्रकार के लिए प्रकार की जांच बंद कर रहा है।

दस्तावेज़ों में third-party integrations पर अनुभाग भी देखें।

+2

यह उत्तर 100% सही है। मैं इसे फ्लो संस्करण 0.22 के रूप में भी जोड़ना चाहता हूं, आपको संभवतः सभी 'node_modules' को अनदेखा करने की आवश्यकता नहीं है, क्योंकि फ्लो अब गैर-'@ प्रवाह' फ़ाइलों को पार नहीं करता है, जिससे अतीत में कई समस्याएं उत्पन्न हुईं। 0.22 से, इसके बजाय 'node_modules' के भीतर विशिष्ट समस्या फ़ाइलों को लक्षित करना बेहतर है। एक पाया गया, लेकिन गैर-'@ प्रवाह' मॉड्यूल के लिए डिफ़ॉल्ट व्यवहार 'कोई भी' है, जो इस उत्तर में बहुत सारे बॉयलरप्लेट को बचाता है। –

2

कई मामलों declare function exports(args: any): any; में मार्टिन जवाब पर विस्तार करने के लिए, क्योंकि any प्रकार वाक्य रचना एक छोटे से नीचे ट्रैक करने के लिए मुश्किल था, एक कैच-ऑल ताकि आप एक मॉड्यूल में हर संपत्ति घोषित करने के लिए नहीं है (_.all जैसे, अंडरस्कोर के लिए _.each और इतने पर)। हालांकि यह सभी मामलों में काम नहीं करता है।

यहां एक नमूना इंटरफ़ेस फ़ाइल का एक टुकड़ा मुझे लगता है कि अर्द्ध काम करता है का उपयोग किया है है:

declare module 'jquery' { 
    declare function exports(args: any): any; 
} 

declare module 'underscore' { 
    declare function exports(args: any): any; 
} 

// "declare function exports" doesn't seem to work in this case 
declare module 'react' { 
    declare var PropTypes: any; 
    declare var Component: any; 
    declare function createElement(args: any): any; 
    // ...and so on 
} 

एक अधिक विस्तृत इंटरफ़ेस फ़ाइल उदाहरण के लिए, आप क्या facebook/flow's interface files look like on github देख सकते हैं।

संबंधित मुद्दे