2016-04-22 5 views
5

मैंने हाल ही में Suave के साथ शुरू किया है; मैंने यमन और एफ # जनरेटर का उपयोग करके एक परियोजना की स्थापना की। ऐप चलाने के लिए, मैं नकली का उपयोग करके निष्पादन योग्य बनाता हूं और फिर इसे चलाता हूं। जब भी मैं किसी भी ऐप फाइलों को बदलता हूं, यानी * .fs फाइलें, मुझे बिल्डिंग और निष्पादन योग्य चलाने की प्रक्रिया दोहराना पड़ता है।फ़ाइल पर Suave ऐप को फिर से लोड करें

क्या विकास के लिए एक बेहतर प्रक्रिया है, जिसमें ऐप पुनर्निर्माण या पुनः लोड/फ़ाइल सहेजने पर पुनरारंभ होता है?

+0

FsReveal के निर्माण स्क्रिप्ट करता है: https://github.com/fsprojects/FsReveal/blob/master/build.fsx – Foole

उत्तर

4

F# Snippets project के लिए बिल्ड स्क्रिप्ट ठीक है।

विचार यह है कि आपके पास app.fsx फ़ाइल है जो app नाम के शीर्ष-स्तर WebPart को परिभाषित करती है। आप F# Snippets here के लिए उदाहरण देख सकते हैं। app.fsx स्क्रिप्ट फ़ाइल अन्य फ़ाइलों को भी लोड कर सकती है, ताकि आप अपने आवेदन को किसी भी तरह से व्यवस्थित कर सकें।

build.fsxbuild script तो एक सर्वर शुरू होता है, पर नज़र रखता है अपने स्रोत कोड और app.fsx के लिए सिस्टम में परिवर्तन फ़ाइल और यह पृष्ठभूमि में F# Compiler Service का उपयोग कर और बदल देता है एक नया app मूल्य से प्राप्त के साथ "वर्तमान में लोड" सर्वर को पुनः लोड करता।

वर्तमान निर्माण स्क्रिप्ट का एकमात्र सीमा यह है कि यह स्मृति को सही ढंग से रिसाइम नहीं करता है (इसे शायद बिल्ड स्क्रिप्ट में एफ # इंटरैक्टिव सत्र को पुन: प्रयास करके तय किया जाना चाहिए) और इसलिए बड़ी संख्या में रीलोड के बाद यह स्मृति से बाहर हो जाता है। लेकिन फिर भी, यह वर्कफ़्लो को बहुत अच्छा बनाता है!

+0

मैं यह समझ के रूप में, एक वैकल्पिक स्क्रिप्ट फ़ाइलें उपयोग करने के लिए है (.fsx)। क्या एक स्क्रिप्टेड स्वीव ऐप से संकलित एक "सर्वोत्तम अभ्यास" माइग्रेशन पथ है? – Ari

+0

आप दोनों तरीकों से काम करने के लिए प्रोजेक्ट सेट कर सकते हैं। उदाहरण के लिए https://github.com/fssnippets/fssnip-website देखें। –

1

मैं टॉमस के समान दृष्टिकोण का उपयोग करता हूं लेकिन बिल्ड स्क्रिप्ट की एक बाल प्रक्रिया में सर्वर चलाता हूं। इससे पुनरारंभ करने के लिए थोड़ा धीमा हो जाता है लेकिन किसी भी मेमोरी या बंदरगाहों को रिसाव नहीं करता है। यह मुझे मेरी ऐप स्क्रिप्ट्स (इस मामले में ./app) बनाम मेरी बिल्ड स्क्रिप्ट के लिए आसानी से एक अलग कार्यशील निर्देशिका का उपयोग करने देता है।

यहां मेरी नकली लिपि का एक कट डाउन संस्करण है।

#r "packages/FAKE/tools/FakeLib.dll" 
open Fake 

let wait() = System.Console.Read() |> ignore 

let runServer() = 
    fireAndForget (fun startInfo -> 
     startInfo.WorkingDirectory <- "./app" 
     startInfo.FileName <- FSIHelper.fsiPath 
     startInfo.Arguments <- "--define:RELOAD server.fsx") 


Target "Watch" (fun _ -> 
    use watcher = !! "app/*.fsx" |> WatchChanges (fun changes -> 
     tracefn "%A" changes 
     killAllCreatedProcesses() 
     runServer() 
) 
    runServer() 
    wait() 
) 
संबंधित मुद्दे