coffee-script
рдХреЛ рдмрд┐рдирд╛ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПрдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИ 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 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
output/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ package.json
рдмрдирд╛рдПрдБ:{
"dependencies": {
"vm2": "latest"
}
}
vm2
рдХреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:externals: {
"vm2": "require('vm2')"
}
output/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ:"scripts": {
"prepare-output": "cd output && npm install",
"prepare": "webpack --progress && npm run prepare-output"
}
рдирдорд╕реНрддреЗ !
рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕реАрдзреЗ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ lib рдХреЛ рд╕реА/рд╕реА рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ)
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 рдореЗрдВ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред
main.js (рд▓рдЧрднрдЧ рд▓рд╛рдЗрди 250)
[...]
const host = {
version: parseInt(process.versions.node.split('.')[0]),
require: eval('require'),
process,
console,
[...]
рдореИрдВрдиреЗ "рдЖрд╡рд╢реНрдпрдХрддрд╛" рдХреЛ "рдЖрд╡рд╢реНрдпрдХрддрд╛: eval ('рдЖрд╡рд╢реНрдпрдХрддрд╛')" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдХреЙрдХреНрд╕рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ) рдФрд░ рдЗрд╕рдиреЗ рдЪрд╛рд▓ рдЪрд▓реАред
рдЕрдм рдореИрдВ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, vm2 рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдореБрдЭреЗ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛! :)
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
FWIW - node
рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╡реЗрдмрдкреИрдХ 5 рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐?
vm2
рдХреЛWebpack
рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗvm2
рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдХреЗрд╡рд▓ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ:output/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХpackage.json
рдмрдирд╛рдПрдБ:vm2
рдХреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:output/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ: