Fable: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์ ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฐธ์กฐ๊ฐ€ ์ค‘๋‹จ๋จ

์— ๋งŒ๋“  2016๋…„ 07์›” 27์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fable-compiler/Fable

์ตœ์‹  Fable(0.4.4)์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์— ์ ์ด ์žˆ์œผ๋ฉด Fable์ด require ํ˜ธ์ถœ์—์„œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Fable์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์ „์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

Library , Library.Another ๋ฐ Main ์„ธ ๊ฐœ์˜ F# ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. Main ๋Š” Library ๋ฐ Library.Another ๋ชจ๋‘ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‘ ๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฏธ Fable์— ์˜ํ•ด out/library ๋ฐ out/library-another ๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด fableconfig.json์„ ์‚ฌ์šฉํ•˜์—ฌ Main ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด...

{
  "module": "commonjs",
  "outDir": "out/main",
  "projFile": "Test/Main/Main.fsproj",
  "refs": {
    "Library": "../library",
    "Library.Another": "../library-another"
  }
}

... Library.Another ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“ˆ์ด ์ฐธ์กฐ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋œ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์ž˜๋ชป๋œ require ํ˜ธ์ถœ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค( Library ์—์„œ ์ฐธ์กฐ๋œ ๋ชจ๋“ˆ

var _SomeModule = require("../library/SomeModule");

var _AnotherModule = require("../library-another/Library.Another/AnotherModule");

์ฒซ ๋ฒˆ์งธ ์š”๊ตฌ ํ˜ธ์ถœ์€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ๋ฒˆ์งธ require ํ˜ธ์ถœ์€ ์–ด๋–ค ์ด์œ ๋กœ ๊ฒฝ๋กœ์— Library.Another/ ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ์ฐธ์กฐ๋ฅผ ํ•ด์„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

AMD ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ํ•„์ž์˜ ๊ฒฝ์šฐ Main ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ๋™์ผํ•œ ์†”๋ฃจ์…˜(์™ธ๋ถ€ DLL๊ณผ ๋ฐ˜๋Œ€) ๋‚ด์—์„œ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

ํ , ํ…Œ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ์— ๋น„์Šทํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์ด ๋ฌธ์ œ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณต๊ฐœ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ˜น์‹œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์•„๋ž˜์™€ ๋น„์Šทํ•ฉ๋‹ˆ๊นŒ?

/Main/Main.fsproj
/Library/Library.fsproj
         SomeModule.fs
/Library.Another.fsproj
/Library.Another/AnotherModule.fs

์‹ ๊ณ  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚ด ํ”„๋กœ์ ํŠธ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋น ๋ฅธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/funlambda/fable-project-ref-example

๋ณต์ œํ•˜๊ณ  build-and-run.sh ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“ˆ ์ฐธ์กฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋Š” out/main/Program.js .

var _AnotherModule = require("../library-another/Library.Another/AnotherModule");

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค :) ์ˆ˜์ • ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ [email protected] ๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด์‹œ๊ฒ ์–ด์š”?

์ด์ œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •๊ณผ ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฅธ ์ฒ˜๋ฆฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰