рдПрдХ рд╡реАрдПрдо рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб:
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)
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдореИрдВ рдЖрдкрдХреЛ рдорджрджрдЧрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ!
рдореИрдВ рднреА рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛рдлреА рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рдеред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпреЗ рдореБрджреНрджреЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ред рдореИрдВ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкреИрдЯрд░реНрди рдареАрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ 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 рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рддрд╛рд░реАрдл рд╣реИред рдпрд╣ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рдорд┐рд▓реА рдЬрдм рдореИрдВрдиреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ ES6 _class_ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдареАрдХ рдерд╛
ES5.