UNPKG

bytenode-webpack-plugin

Version:

Compiles JS files to V8 bytecode.

40 lines (35 loc) 1.15 kB
const Module = require('module') const bytenode = require('bytenode') require('v8').setFlagsFromString('--no-lazy') class BytenodeWebpackPlugin { constructor (options = {}) { this.options = Object.assign({ compileAsModule: true, keepSource: false }, options) } apply (compiler) { // Before emitting compiled files compiler.hooks.emit.tap('BytenodeWebpackPlugin', compilation => { // For all .js files for (const filename in compilation.assets) { if (/\.js$/.test(filename)) { // Compile them to v8 bytecode and emit them as .jsc files let source = compilation.assets[filename].source() if (this.options.compileAsModule) { source = Module.wrap(source) } const bytecode = bytenode.compileCode(source) compilation.assets[filename.replace('.js', '.jsc')] = { source: () => bytecode, size: () => bytecode.length } if (!this.options.keepSource) { delete compilation.assets[filename] } } } }) } } module.exports = BytenodeWebpackPlugin