๋ค์๊ณผ ๊ฐ์ ์ฝ๋ :
const { VM } = require('vm2')
const vm = new VM()
const res = vm.run('[1, 2, 3]')
console.log(res)
์ธ์๋ฌผ:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
์ด๊ฒ์ ๋ฒ๊ทธ์
๋๊น ์๋๋ฉด ์์๋๋ ๋์์
๋๊น?
VM์ NodeJS ๋น๋๋ ๋ค์์ ๋ฐํํฉ๋๋ค.
[1, 2, 3]
์์๋๋ก.
์๋ ํ์ธ์ @patriksimek , ๋๋ ๋น์ ์ ๋ฉ์ธ ๋ฉ์ธํ ์ด๋๋ก ์ธ์ฉํฉ๋๋ค. ๋๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ VM ๋ฐ NodeVM์์ ๋ฐ์ํฉ๋๋ค.
์ ๊ฒฝ์ฐ์๋ NodeVM ๋ด๋ถ์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ์ค ๋ํซ์ด ์์ต๋๋ค.
const array = [];
array.push({a: 1, b: 2});
console.log(array);
๊ทธ๋ฆฌ๊ณ ์ธ์ :
[{a: 1, b: 2}, '0': {a: 1, b: 2}]
NodeVM ์ค์ ์ ์ฝ์์ inherit
๋ฉ๋๋ค.
์ด ๋์์ ์์ฑ ํ ์์๋ ๋จ์๊ฐ ์์ต๋๊น?
๋ฏธ๋ฆฌ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ ๊ท์ฐฎ๊ฒํด์ ์ฃ์กํฉ๋๋ค.
์ด ๊ฐ์ฒด๋ ํ๋ก์๋ก ๋ฐํ์ก์ต๋๋ค. Decontextify.instance ์ด๋๊ฐ์ ์๋ชป๋ ๊ฐ์ฒด๊ฐ ๋ฐํ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋
ธ๋ v8.9.3 ๋ฐ ๋
ธ๋ v8.10.0์์ ์์๋๋ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
๋ฌธ์ ๋ ๋
ธ๋ v10.14.2์์ ํ์ธ๋์์ต๋๋ค.
์ด ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด ๋ฒ๊ทธ๋ฅผ ์ถ์ ํ์ฌ ๋ด ์ฝ๋์ ์๋ค๊ณ ์๊ฐํ๋ฉด์ ์ค๋งํ์ต๋๋ค. ๊ฒฐ๊ตญ ์์ฃผ ์ต์ํ์ ์์ ๋ฅผ ์๋ํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ vm2
๊ฐ ๋ฒ์ธ์ด์์ต๋๋ค. for of
๋ฃจํ๋ ๋ฐฐ์ด๋ก ์ด์ํ ์ผ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ธ๋ v8.9.3 ๋ฐ ๋ ธ๋ v8.10.0์์ ์์๋๋ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
๋ฌธ์ ๋ ๋ ธ๋ v10.14.2์์ ํ์ธ๋์์ต๋๋ค.
๋ด๊ฐ ์ ์ ํ ์์๋ ๊ฒ์ v.8.10.0 ๋ฐ v10.14.2์์ ๋๋ฒ๊ฑฐ๋ฅผ ์คํํ๊ณ ์ถ๋ ฅ์ด ๋ค๋ฅธ ์ฝ๋ ์ค์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
์ด๋ Proxy.handler.ownKeys () ํธ๋ฉ์ ์ฌ์ฉํ์ฌ ๋ฐ์ํ์ต๋๋ค. ์ด๊ฒ์ ๋ ธ๋์ ๋ฌธ์ ์์ผ๋ฉฐ v12์์ ์์ ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
์ด์ ๋ฒ์ ์ ๋ ธ๋์ ๋ํ ๋์ฒด ๊ณํ์ด ์์ต๋๊น?
๋ฌธ์ ๋ ๋ ธ๋ 10์์๋ง ๋ฐ์ํฉ๋๋ค. ์์ ์ ํ ์ ์์ง๋ง ๋งค๋ฒ ํจ์ ํธ์ถ์๋ฅผ ํ์ธํ๊ณ ํธ์ถ์๋ฅผ ๊ฐ์ ธ ์ค๋ ค๋ฉด ์คํ ์ถ์ ์ ์์ฑํด์ผํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฌธ์ ๋ ๋ ธ๋ 10์์๋ง ๋ฐ์ํฉ๋๋ค. ์์ ์ ํ ์ ์์ง๋ง ๋งค๋ฒ ํจ์ ํธ์ถ์๋ฅผ ํ์ธํ๊ณ ํธ์ถ์๋ฅผ ๊ฐ์ ธ ์ค๋ ค๋ฉด ์คํ ์ถ์ ์ ์์ฑํด์ผํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์ ๊ตฌ์ฑ ๋๋ CLI ๋งค๊ฐ ๋ณ์ ๊ฒ์ฌ๋ ์ด๋ป์ต๋๊น? ๊ทธ์ ๋ํ ์ฝ๋๋ ๋งค์ฐ ์ ์ ์ ์์ต๋๋ค.
vm._context
์ console
์ถ๊ฐ
vm._context.console = console
vm.run("console.log([1,2,3])")
์ ๋๋ก ์๋ํ๊ณ ์์ต๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ @patriksimek , ๋๋ ๋น์ ์ ๋ฉ์ธ ๋ฉ์ธํ ์ด๋๋ก ์ธ์ฉํฉ๋๋ค. ๋๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ VM ๋ฐ NodeVM์์ ๋ฐ์ํฉ๋๋ค.
์ ๊ฒฝ์ฐ์๋ NodeVM ๋ด๋ถ์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ์ค ๋ํซ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ์ :
NodeVM ์ค์ ์ ์ฝ์์
inherit
๋ฉ๋๋ค.์ด ๋์์ ์์ฑ ํ ์์๋ ๋จ์๊ฐ ์์ต๋๊น?
๋ฏธ๋ฆฌ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ ๊ท์ฐฎ๊ฒํด์ ์ฃ์กํฉ๋๋ค.