Vm2: TypeError : ํ”„๋ก์‹œ์˜ 'get': 'constants'์†์„ฑ์ด ํ”„๋ก์‹œ ๋Œ€์ƒ์˜ ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉฐ ๊ตฌ์„ฑ ํ•  ์ˆ˜์—†๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ์ด์ง€๋งŒ ํ”„๋ก์‹œ๊ฐ€ ์‹ค์ œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 03์›” 07์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: patriksimek/vm2

VM์—์„œ ์ข…์†์„ฑ์„ ์š”๊ตฌํ•˜๋Š” ๋™์•ˆ ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ํ•  ์ฝ”๋“œ :

const { NodeVM } = require("vm2");

const vm = new NodeVM({
  console: "redirect",
  sandbox: {},
  require: {
    builtin: ["fs"]
  },
  wrapper: "none"
});

vm.run("const fs = require('fs'); fs.constants");

์ „์ฒด ์Šคํƒ ์ถ”์  :

node_modules/vm2/lib/main.js:327
            throw this._internal.Decontextify.value(e);
            ^
TypeError: 'get' on proxy: property 'constants' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected '[object Object]' but got '[object Object]')
    at Object.<anonymous> (vm.js:1:91)
    at NodeVM.run (node_modules/vm2/lib/main.js:325:27)
    at Object.<anonymous> (script.js:12:4)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.runMain (module.js:590:10)
    at run (bootstrap_node.js:394:7)

๋„์›€์ด ๋ ๋งŒํ•œ ๋‹ค๋ฅธ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

bug confirmed help wanted

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

์‹คํ–‰์— ์‚ฌ์šฉ ๋œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ES6 _class_๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฒˆ์—ญ ํ•œ ํ›„์— ๊ดœ์ฐฎ ์•˜์–ด
ES5.

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

๋˜ํ•œ ํ”„๋ก์‹œ, ํŠนํžˆ ์ƒ์†๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ํ”„๋ก์‹œ์˜ ๊ตฌํ˜„ ๋˜๋Š” ์ œํ•œ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์กฐ์‚ฌ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํŒจํ„ด์ด ์™œ ๊ดœ์ฐฎ์ง€ ์•Š์€์ง€ ์ดํ•ดํ•˜๊ธฐ์—๋Š” ํ”„๋ก์‹œ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์ง€๋งŒ Contextify.object.get ์—์„œ ์ฝ๊ธฐ ์ „์šฉ ๊ตฌ์„ฑ ๋ถˆ๊ฐ€๋Šฅ ์†์„ฑ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

    object: function(object, traps, deepTraps, flags, mock) {
        const proxy = new host.Proxy(object, host.Object.assign({
            get: (target, key, receiver) => {
                if (key === 'vmProxyTarget' && DEBUG) return object;
                if (key === 'isVMProxy') return true;
                if (mock && key in mock) return mock[key];
                if (key === 'constructor') return Object;
                if (key === '__proto__') return Object.prototype;

                                // Added code
                const config = host.Object.getOwnPropertyDescriptor(object, key);
                if (config && config.configurable === false && config.writable === false) {
                    return object[key];
                }

์ด๊ฒƒ์€ get ๊ณ ์ • MDN ์„ค๋ช… ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ ๊ฐœ์ฒด ์†์„ฑ์ด ์“ฐ๊ธฐ ๋ฐ ๊ตฌ์„ฑ ํ•  ์ˆ˜์—†๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ ์ธ ๊ฒฝ์šฐ ์†์„ฑ์— ๋Œ€ํ•ด๋ณด๊ณ  ๋œ ๊ฐ’์€ ํ•ด๋‹น ๋Œ€์ƒ ๊ฐœ์ฒด ์†์„ฑ์˜ ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ƒŒ๋“œ ๋ฐ•์‹ฑ์„ ๊นจ๋œจ๋ฆด ๊ฒƒ ๊ฐ™๋„ค์š”

์œ„์˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์—ฌ ๋กœ์ปฌ์—์„œ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ (https://developers.google.com/sheets/api/quickstart/nodejs)์˜ ๊ฑฐ์˜ ์ •ํ™•ํ•œ ์‚ฌ๋ณธ์—์„œ Google ์Šคํ”„๋ ˆ๋“œ ์‹œํŠธ ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์•Œ๋ ค์ง„ ๋ฌธ์ œ " ํ”„๋ก์‹œ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?"์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ ๊นŒ? ์ƒŒ๋“œ ๋ฐ•์‹ฑ์„ ๊นฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?
graceful-fs ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋Š”๋ฐ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰์— ์‚ฌ์šฉ ๋œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ES6 _class_๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฒˆ์—ญ ํ•œ ํ›„์— ๊ดœ์ฐฎ ์•˜์–ด
ES5.

๋ถˆํ–‰ํžˆ๋„ @mjbvz ๊ฐ€ ๊ฒŒ์‹œ ํ•œ ์†”๋ฃจ์…˜์€ ์ƒŒ๋“œ ๋ฐ•์Šค๋ฅผ

์•„์ด๋””์–ด๋Š” ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ํด๋ก ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํด๋ก ์€ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ก ์€ ๊ณ ์œ  ํ•œ ๊ฐ€์น˜์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” fs.constants ์˜ ๋ณต์ œ๋ณธ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๋” ์ด์ƒ ์ฝ๊ธฐ ์ „์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ƒŒ๋“œ ๋ฐ•์Šค๊ฐ€ ๊ฐœ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒŒ๋“œ ๋ฐ•์Šค์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ปจํ…์ŠคํŠธ์—์„œ๋„ ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒŒ๋“œ ๋ฐ•์Šค๋กœ ๋ณด๋‚ผ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋งค์šฐ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ „์šฉ ์ธ ๊ฒฝ์šฐ ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
googleapi ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค ...

https://github.com/patriksimek/vm2/pull/252๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค

@XmiliaH ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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