Vm2: TypeScript๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 10์›” 12์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: patriksimek/vm2

์•ˆ๋…•ํ•˜์„ธ์š”, ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ts ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต์œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

TypeScript ์ปดํŒŒ์ผ๋Ÿฌ API๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? TypeScript ์ฝ”๋“œ๋ฅผ JavaScript ์ฝ”๋“œ๋กœ ๋™์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ „์— ์‚ฌ์šฉํ–ˆ๊ณ  ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

const {VM} = require('vm2');
const ts = require('typescript');

const vm = new VM();

const res = ts.transpile(`
    let x: number = 3;
    x + 5;
`);

console.log(vm.run(res)); // 8

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

typescript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” discord ๋ด‡์„ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ typescript ์‹คํ–‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๊ฐ€์žฅ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์ด ์ตœ๊ณ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํŽธ์ง‘: ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐฐํ›„์—์„œ https://nodejs.org/api/vm.html์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” typescript๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

TypeScript ์ปดํŒŒ์ผ๋Ÿฌ API๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? TypeScript ์ฝ”๋“œ๋ฅผ JavaScript ์ฝ”๋“œ๋กœ ๋™์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ „์— ์‚ฌ์šฉํ–ˆ๊ณ  ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

const {VM} = require('vm2');
const ts = require('typescript');

const vm = new VM();

const res = ts.transpile(`
    let x: number = 3;
    x + 5;
`);

console.log(vm.run(res)); // 8

์•„, ์–ด๋–ค ์ด์œ ๋กœ vm2 lol๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ƒ๊ฐ์„ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ts.transpile ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
```JS
const {VM} = ์š”๊ตฌ('vm2');
const ts = ์š”๊ตฌ('ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ');

const vm = new VM({์ปดํŒŒ์ผ๋Ÿฌ: ts.transpile});

console.log(vm.run( let x: number = 3; x + 5; )); // 8

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