Vm2: vm2 рдХреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: patriksimek/vm2

  • [x] рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ coffee-script рдХреЛ рдмрд┐рдирд╛ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдП
  • [] fs - sandbox.js рдФрд░ contextify.js рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдиреЗрдВ
feature request help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? vm2 рдХреЛ Webpack рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ vm2 рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдХреЗрд╡рд▓ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

  1. output/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ package.json рдмрдирд╛рдПрдБ:
{
    "dependencies": {
        "vm2": "latest"
    }
}
  1. рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ vm2 рдХреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
externals: {
    "vm2": "require('vm2')"
}
  1. рдПрдирдкреАрдПрдо рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рднреА рд╕рд╛рдорд╛рди рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж output/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ:
"scripts": {
    "prepare-output": "cd output && npm install",
    "prepare": "webpack --progress && npm run prepare-output"
}

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИ require ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реЗрдмрдкреИрдХ рдХреЗрд╡рд▓ рдЗрдирдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

WARNING in ./~/vm2/lib/main.js
147:26-33 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

WARNING in ./~/vm2/lib/main.js
251:3-10 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

WARNING in ./~/vm2/lib/main.js
295:26-33 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

рд╡реЗрдмрдкреИрдХ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди require рдХреЛ exceptions :
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрдкреИрдХ рд╕реЗ рдкрд╣рд▓реЗ:

        Reflect.defineProperty(this, '_internal', {
            value: vm.runInContext(`(function(require, host) { ${cf} \n})`, this._context, {
                filename: `${__dirname}/contextify.js`,
                displayErrors: false
            }).call(this._context, require, host)
        });

рд╡реЗрдмрдкреИрдХ рдХреЗ рдмрд╛рдж:

        Reflect.defineProperty(this, '_internal', {
            value: vm.runInContext(`(function(require, host) { ${cf} \n})`, this._context, {
                filename: `${__dirname}/contextify.js`,
                displayErrors: false
            }).call(this._context, !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()), host)
        });

require рдХреЛ eval('require') рдмрджрд▓реЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? vm2 рдХреЛ Webpack рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ vm2 рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдХреЗрд╡рд▓ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

  1. output/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ package.json рдмрдирд╛рдПрдБ:
{
    "dependencies": {
        "vm2": "latest"
    }
}
  1. рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ vm2 рдХреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
externals: {
    "vm2": "require('vm2')"
}
  1. рдПрдирдкреАрдПрдо рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рднреА рд╕рд╛рдорд╛рди рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж output/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ:
"scripts": {
    "prepare-output": "cd output && npm install",
    "prepare": "webpack --progress && npm run prepare-output"
}

рдирдорд╕реНрддреЗ !

рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:

  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕реАрдзреЗ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ lib рдХреЛ рд╕реА/рд╕реА рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ)

  2. sandbox.js/contextify.js рдХреЗ рд▓рд┐рдП fs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ sandbox.txt & Referenceify.txt рдХрд░ рджрд┐рдпрд╛, рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рджреЗ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЙ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

main.js (рд╢реАрд░реНрд╖ рдкрд░)

const sb = require('./sandbox.txt');
const cf = require('./contextify.txt');

webpack.config.js

{
    test: /\.txt$/,
    use: 'raw-loader'
}

main.js рдореЗрдВ sandbox.js/contextify.js рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ sandbox.txt/contextify.txt рдореЗрдВ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред

  1. рдЕрдВрддрд┐рдо рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛, рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: NodeVM рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдмрджрд▓ рджреА

main.js (рд▓рдЧрднрдЧ рд▓рд╛рдЗрди 250)

[...]
const host = {
    version: parseInt(process.versions.node.split('.')[0]),
    require: eval('require'),
    process,
    console,
[...]

рдореИрдВрдиреЗ "рдЖрд╡рд╢реНрдпрдХрддрд╛" рдХреЛ "рдЖрд╡рд╢реНрдпрдХрддрд╛: eval ('рдЖрд╡рд╢реНрдпрдХрддрд╛')" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдХреЙрдХреНрд╕рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ) рдФрд░ рдЗрд╕рдиреЗ рдЪрд╛рд▓ рдЪрд▓реАред

рдЕрдм рдореИрдВ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, vm2 рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдореБрдЭреЗ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛! :)

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

FWIW - node рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╡реЗрдмрдкреИрдХ 5 рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vshymanskyy picture vshymanskyy  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдкреНрд░реЙрдХреНрд╕реА рдкрд░ 'рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ': рд╕рдВрдкрддреНрддрд┐ 'рд╕реНрдерд┐рд░рд╛рдВрдХ' рдкреНрд░реЙрдХреНрд╕реА рд▓рдХреНрд╖реНрдп рдкрд░ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЧреИрд░-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░реЙрдХреНрд╕реА рдиреЗ рдЕрдкрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛
karthikv picture karthikv  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keyosk picture keyosk  ┬╖  64рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

unxcepted picture unxcepted  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ