GithubHelp home page GithubHelp logo

atom / electron-link Goto Github PK

View Code? Open in Web Editor NEW
214.0 214.0 48.0 425 KB

A module to bundle your electron app into a single file that can be used for V8 snapshots.

License: MIT License

JavaScript 100.00%

electron-link's Introduction

Atom and all repositories under Atom will be archived on December 15, 2022. Learn more in our official announcement

electron-link

electron-link is a node module that takes a JavaScript file (typically the entry point of an application) and a list of modules that need to be required lazily (see Atom's build scripts for an example). Then, starting from that file, it traverses the entire require graph and replaces all the forbidden require calls in each file with a function that will be called at runtime. The output is a single script containing the code for all the modules reachable from the entry point. This file can be then supplied to mksnapshot to generate a snapshot blob.

It can also determine whether a module can be snapshotted or not. For instance, the following code can be snapshotted:

const path = require('path')

module.exports = function () {
  return path.join('a', 'b', 'c')
}

And generates the following code:

let path;
function get_path () {
  return path || path = require('path');
}

module.exports = function () {
  return get_path().join('a', 'b', 'c')
}

You can notice that the above code is valid because the forbidden module (i.e. path) is used inside a function that doesn't get called when requiring the script. On the other hand, when trying to process the following code, electron-link will throw an error because it is trying to access a forbidden module right when it gets required:

const path = require('path')

module.exports = path.join('a', 'b', 'c')

Being a tool based on static analysis, however, electron-link is unable to detect all the cases where a piece of code can't be included in a snapshot. Therefore, we recommend running the generated JavaScript file in an empty V8 context (similar to the one provided by mksnapshot) to catch any invalid code that might have slipped through.

Installation

npm install --save electron-link

Usage

const electronLink = require('electron-link')

const snapshotScript = await electronLink({
  baseDirPath: '/base/dir/path',
  mainPath: '/base/dir/path/main.js',
  cachePath: '/cache/path',
  shouldExcludeModule: (modulePath) => excludedModules.has(modulePath)
})

const snapshotScriptPath = '/path/to/snapshot/script.js'
fs.writeFileSync(snapshotScriptPath, snapshotScript)

// Verify if we will be able to use this in `mksnapshot`
vm.runInNewContext(snapshotScript, undefined, {filename: snapshotScriptPath, displayErrors: true})

electron-link's People

Contributors

aminya avatar anmonteiro avatar binarymuse avatar darangi avatar daviwil avatar deedeeg avatar ingramz avatar karthanistyr avatar lkashef avatar rafeca avatar sadick254 avatar smashwilson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

electron-link's Issues

Generating snapshot script fails with "Cannot replace with lazy function because the supplied node does not belong to an assignment"

Following is the error - any help in debugging this further?

Generating snapshot script at "\build\startup.js" (9)MemberExpression MemberExpression CallExpression ExpressionStatement Program [17:27:48] 'makesnapshot' errored after 467 ms [17:27:48] Error: \build\lib\main.js Cannot replace with lazy function because the supplied node does not belong to an assignment expression or a variable declaration! at FileRequireTransform.replaceAssignmentOrDeclarationWithLazyFunction (\node_modules\electron-link\lib\file-require-transform.js:181:11) at Context.recast.types.visit.visitIdentifier (\node_modules\electron-link\lib\file-require-transform.js:72:18) at Context.invokeVisitorMethod (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:344:49) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:196:32) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at NodePath.each (\node_modules\recast\node_modules\ast-types\lib\path.js:101:26) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:219:18) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at visitChildren (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:246:25) at Visitor.PVp.visitWithoutReset (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:204:20) at Visitor.PVp.visit (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:133:29) at Object.visit (\node_modules\recast\node_modules\ast-types\lib\path-visitor.js:101:55) at FileRequireTransform.replaceDeferredRequiresWithLazyFunctions (\node_modules\electron-link\lib\file-require-transform.js:68:20)

leveldown@^1.6.0 dependency breaks builds on Node.js v10.0.0

The current version of leveldown (v3.0.0) builds on Node.js perfectly fine, however the old ^1.6.0 dependency specified here breaks the build of Atom.

Versions:
Attempting to build atom/atom@59cb1dd.

Node.js: v10.0.0
npm: v6.0.0
OS: Windows 10 x64


Checking the npm debug log shows this message:

32386 silly install [email protected]
32387 info lifecycle [email protected]~install: [email protected]
32388 verbose lifecycle [email protected]~install: unsafe-perm in lifecycle true
32389 verbose lifecycle [email protected]~install: PATH: C:\Users\abneyl\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\temp\atom\script\node_modules\leveldown\node_modules\.bin;C:\temp\atom\script\node_modules\.bin;C:\Python27;C:\Program Files\ConEmu\ConEmu\Scripts;C:\Program Files\ConEmu;C:\Program Files\ConEmu\ConEmu;C:\Program Files\Docker\Docker\Resources\bin;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Python36\Scripts\;C:\Program Files\Python36\;C:\Program Files\Haskell\bin;C:\Program Files\Haskell Platform\7.10.2-a\lib\extralibs\bin;C:\Program Files\Haskell Platform\7.10.2-a\bin;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\WebEx\Productivity Tools;C:\Program Files\PuTTY\;C:\Program Files\Haskell Platform\7.10.2-a\mingw\bin;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Program Files (x86)\GnuPG\bin;C:\Ruby24-x64\bin;C:\php7;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\dotnet\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\LLVM\bin;C:\Users\abneyl\AppData\Local\Microsoft\WindowsApps;C:\Users\abneyl\AppData\Local\atom\bin;C:\Users\abneyl\AppData\Local\ComposerSetup\bin;C:\Users\abneyl\AppData\Roaming\Composer\vendor\bin;C:\Users\abneyl\bin;C:\Users\abneyl\AppData\Local\Microsoft\WindowsApps;C:\Users\abneyl\AppData\Roaming\npm;C:\Users\abneyl\AppData\Local\GitHubDesktop\bin
32390 verbose lifecycle [email protected]~install: CWD: C:\temp\atom\script\node_modules\leveldown
32391 silly lifecycle [email protected]~install: Args: [ '/d /s /c', 'prebuild-install || node-gyp rebuild' ]
32392 silly lifecycle [email protected]~install: Returned: code: 1  signal: null
32393 info lifecycle [email protected]~install: Failed to exec install script

And attempting to install it individually on a blank project leads to this message:

c:\temp\foo\node_modules\nan\nan_maybe_43_inl.h(112): error C2039: 'ForceSet': is not a member of 'v8::Object' (compiling source file ..\src\batch.cc) [C:\temp\foo\node_modules\leveldown\build\leveldown.vcxproj]
  c:\users\abneyl\.node-gyp\10.0.0\include\node\v8.h(3111): note: see declaration of 'v8::Object' (compiling source file ..\src\batch.cc)
For reference, here is the completely useless error printed when running script\build.
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Users\abneyl\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:225:12)
gyp ERR! System Windows_NT 10.0.16299
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\abneyl\\AppData\\Roaming\\npm\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\temp\atom\script\node_modules\leveldown
gyp ERR! node -v v10.0.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\abneyl\AppData\Roaming\npm-cache\_logs\2018-04-26T19_05_31_529Z-debug.log
child_process.js:617
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Users\abneyl\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:225:12)
gyp ERR! System Windows_NT 10.0.16299
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\abneyl\\AppData\\Roaming\\npm\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\temp\atom\script\node_modules\leveldown
gyp ERR! node -v v10.0.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\abneyl\AppData\Roaming\npm-cache\_logs\2018-04-26T19_05_31_529Z-debug.log

    at checkExecSyncError (child_process.js:596:11)
    at Object.execFileSync (child_process.js:614:13)
    at module.exports (C:\temp\atom\script\lib\install-script-dependencies.js:9:16)
    at Object.<anonymous> (C:\temp\atom\script\bootstrap:28:1)
    at Module._compile (internal/modules/cjs/loader.js:678:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)
    at Module.load (internal/modules/cjs/loader.js:589:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:528:12)
    at Function.Module._load (internal/modules/cjs/loader.js:520:3)
    at Module.require (internal/modules/cjs/loader.js:626:17)

So close, but cannot get it to work (elaborate snippets inside)!

I looked very closely at how Atom implements electron-link, but I for the world cannot get it to work... It also seems like almost none is actually using this, which is a shame, because it's a pretty cool feature. Hence I'm going to document what I have done, so others can learn from it and save themselves a day of work. Anyway, some help would be very much appreciated to get it running. I feel like I'm close, but I'm just not seeing what I'm missing...

I made a snapshot.js which contains the following:

if(false) {
   require("./native");
   require("./main");
}

The two files from above are the only two I need a snapshot from. I guarded them with an if(false) so I have complete control when to load them.

I use the following compile.js, roughly based on Atom, but very simplied:

const electronLink = require("electron-link");
const fs = require("fs");
const vm = require("vm");
const path = require("path");
const childProcess = require("child_process");

let processedFiles = 0;

const snapshotScriptPath = "./cache/snapshot_generated.js";

electronLink({
    baseDirPath: "./app",
    mainPath: "./app/snapshot.js",
    cachePath: "./cache",
    shouldExcludeModule: (modulePath) => {
        console.log(modulePath);
        
        return !modulePath.endsWith("native.js") && !modulePath.endsWith("main.js");
    }
}).then(function (snapshotScript) {
    fs.writeFileSync(snapshotScriptPath, snapshotScript);

    vm.runInNewContext(snapshotScript, undefined, { filename: snapshotScriptPath, displayErrors: true });

    var mksnapshotPath = path.join('.', 'node_modules', 'electron-mksnapshot', 'bin', 'mksnapshot');

    childProcess.execFileSync(mksnapshotPath, [snapshotScriptPath, "--startup_blob", "./app/snapshot_blob.bin"]);
}).catch((error) => {
    console.log(error);
});

The two files from the snapshot.js are of the following format:

module.exports = function() {
    //Do stuff
}

My startup.js, which is set in package.json, does the following:

var main;

if (typeof snapshotResult !== 'undefined') {
    snapshotResult.setGlobals(global, process, global, {}, console, require);

    main = snapshotResult.customRequire("./main");
}
else {
    main = require("./main");
}

main();

main() effectively runs the module.exports from before, creates a BrowserWindow with a preload-script, which in turn requires native.js in a similar fashion.

Everything works fine when trying out using electron app from the CLI. But after building, and replacing the default snapshot_blob.bin, it simply does not work, at all.

Can someone please point out what I'm missing?

PS. I also notice, when I open the snapshot_blob.bin with notepad, the whole generated snapshot.js is fully readable, kind of defeating the point of compiling it (other than speed). What's up with that?

`auxiliaryData` not documented

I stumbled across this feature because it seems to be used by atom. For some reason it's not documented here. I would submit a PR to document it if I know what it does but I don't

bitcoin

Prerequisites

Description

Steps to Reproduce

Expected behavior:

Actual behavior:

Reproduces how often:

Versions

Additional Information

Lack of documentation

I'm interested in using this, but the documentation seems to be hopelessly out-of-date with version 0.2.2. Even the tests don't seem like they could work (snapshotResult is frequently referenced but never declared, for example).

Most of the time I've been able to fumble through by reading the source and making educated guesses, but in particular I'm being tripped up on the proper way to call setGlobals, especially the idea of defining window at compile time when that object doesn't exist until runtime.

What is the best way to bring this into my project right now? Should I simply copy the use of 0.0.21 in Atom's master branch?

Electron-link cannot bundle @babel/core

Bug Report

I am trying to update the babel plugin that is used in Atom internally, but Electron-link bundler gives me this error during bundling:

Details
2020-06-29T02:36:43.2059234Z Generating snapshot script at "/__w/1/s/out/startup.js" (3770)Unable to transform source code for module /__w/1/s/out/app/node_modules/@babel/core/lib/config/files/import.js.
2020-06-29T02:36:43.2059872Z SyntaxError: Unexpected token (9:9)
2020-06-29T02:36:43.2060285Z   at Parser.pp$4.raise (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2825:15)
2020-06-29T02:36:43.2060817Z   at Parser.pp.unexpected (/__w/1/s/script/node_modules/acorn/dist/acorn.js:689:10)
2020-06-29T02:36:43.2061403Z   at Parser.pp$3.parseExprAtom (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2266:21)
2020-06-29T02:36:43.2061975Z   at Parser.pp$3.parseExprSubscripts (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2089:21)
2020-06-29T02:36:43.2062562Z   at Parser.pp$3.parseMaybeUnary (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2066:19)
2020-06-29T02:36:43.2063135Z   at Parser.pp$3.parseExprOps (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2010:21)
2020-06-29T02:36:43.2063813Z   at Parser.pp$3.parseMaybeConditional (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1993:21)
2020-06-29T02:36:43.2070126Z   at Parser.pp$3.parseMaybeAssign (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1968:21)
2020-06-29T02:36:43.2071153Z   at Parser.pp$3.parseExpression (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1933:21)
2020-06-29T02:36:43.2073238Z   at Parser.pp$1.parseReturnStatement (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1005:33)
2020-06-29T02:36:43.2074002Z   at Parser.pp$1.parseStatement (/__w/1/s/script/node_modules/acorn/dist/acorn.js:835:37)
2020-06-29T02:36:43.2075304Z   at Parser.pp$1.parseBlock (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1161:23)
2020-06-29T02:36:43.2076941Z   at Parser.pp$3.parseFunctionBody (/__w/1/s/script/node_modules/acorn/dist/acorn.js:2671:24)
2020-06-29T02:36:43.2078497Z   at Parser.pp$1.parseFunction (/__w/1/s/script/node_modules/acorn/dist/acorn.js:1283:10)
2020-06-29T02:36:43.2080618Z   at Parser.pp$1.parseFunctionStatement (/__w/1/s/script/node_modules/acorn/dist/acorn.js:983:17)
2020-06-29T02:36:43.2081360Z   at Parser.pp$1.parseStatement (/__w/1/s/script/node_modules/acorn/dist/acorn.js:830:19)
2020-06-29T02:36:43.2090492Z   at Parser.pp$1.parseTopLevel (/__w/1/s/script/node_modules/acorn/dist/acorn.js:746:23)
2020-06-29T02:36:43.2091224Z   at Parser.parse (/__w/1/s/script/node_modules/acorn/dist/acorn.js:553:17)
2020-06-29T02:36:43.2093874Z   at Function.parse (/__w/1/s/script/node_modules/acorn/dist/acorn.js:576:37)
2020-06-29T02:36:43.2094399Z   at Object.parse (/__w/1/s/script/node_modules/acorn/dist/acorn.js:4949:19)
2020-06-29T02:36:43.2095688Z   at Object.parse (/__w/1/s/script/node_modules/electron-link/node_modules/recast/parsers/acorn.js:14:32)
2020-06-29T02:36:43.2096565Z   at Object.parse (/__w/1/s/script/node_modules/electron-link/lib/file-require-transform.js:26:50)
2020-06-29T02:36:43.2097408Z   at Object.parse (/__w/1/s/script/node_modules/electron-link/node_modules/recast/lib/parser.js:31:30)
2020-06-29T02:36:43.2098265Z   at FileRequireTransform.apply (/__w/1/s/script/node_modules/electron-link/lib/file-require-transform.js:23:23)
2020-06-29T02:36:43.2099091Z   at /__w/1/s/script/node_modules/electron-link/lib/generate-snapshot-script.js:55:56
2020-06-29T02:36:43.2099563Z   at Generator.next (<anonymous>:null:null)
2020-06-29T02:36:43.2100279Z   at step (/__w/1/s/script/node_modules/electron-link/lib/generate-snapshot-script.js:3:191)
2020-06-29T02:36:43.2101049Z   at /__w/1/s/script/node_modules/electron-link/lib/generate-snapshot-script.js:3:361

https://github.visualstudio.com/Atom/_build/results?buildId=74019&view=logs&j=0da5d1d9-276d-5173-c4c4-9d4d4ed14fdb&t=b525c197-f769-5e52-d38a-e6301f5260f2&l=3829

Environment

  System:
    OS: Windows 10 10.0.19041
  Binaries:
	apm  2.5.0
	npm  6.14.5
	node 10.20.1 x64
	atom unknown
	python 2.7.6
	git 1.9.1
  npmPackages:
    @babel/cli: 7.10.3 => 7.10.3
    @babel/core: 7.10.3 => 7.10.3
    @babel/plugin-proposal-class-properties: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-decorators: ^7.10.3 => 7.10.3
    @babel/plugin-proposal-do-expressions: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-export-default-from: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-export-namespace-from: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-function-bind: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-function-sent: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-json-strings: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-logical-assignment-operators: ^7.10.3 => 7.10.3
    @babel/plugin-proposal-nullish-coalescing-operator: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-numeric-separator: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-optional-chaining: ^7.10.3 => 7.10.3
    @babel/plugin-proposal-pipeline-operator: ^7.10.1 => 7.10.1
    @babel/plugin-proposal-throw-expressions: ^7.10.1 => 7.10.1
    @babel/plugin-syntax-dynamic-import: ^7.8.3 => 7.8.3
    @babel/plugin-syntax-import-meta: ^7.10.1 => 7.10.1
    @babel/plugin-transform-async-to-generator: 7.10.1 => 7.10.1
    @babel/preset-env: 7.10.3 => 7.10.3
    @babel/preset-flow: ^7.10.1 => 7.10.1
    @babel/preset-react: ^7.10.1 => 7.10.1

Possible Solution
Is there a version that babel recommends using here instead of 7.10.3? Can I transform babel itself to make it compatible with Electron 5?

Additional context

Native functions can be included in the snapshot with newer V8.

I'm the author and maintainer of V8's custom start-up snapshot. I just came across this project recently. I think you would find this design document very interesting.

A few highlights:

  • FunctionTemplates and ObjectTemplates and their instances can now be serialized, provided that the native function address is provided to v8::SnapshotCreator.
  • FunctionTemplates and ObjectTemplates objects can be extracted from the snapshot, so there is no need to set them up from scratch.
  • Content of internal fields (set by the embedder) in an object can now be serialized/deserializer through user-defined callbacks.
  • Multiple context snapshots per start-up snapshot blob.

Please let me know if you are interested and have questions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.