thislang
bytenode
Our great sponsors
thislang | bytenode | |
---|---|---|
4 | 12 | |
33 | 2,426 | |
- | 2.2% | |
0.0 | 7.1 | |
over 1 year ago | about 1 month ago | |
JavaScript | JavaScript | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
thislang
-
Understanding `this` in Javascript
Method calls are nothing special, just calls which have the form .(). For example: const foo = { bar: function () { console.log(this); } }; foo.bar(); Enter fullscreen mode Exit fullscreen mode For method calls, this gets set to the object from which the method was called. Again, functions don't matter* for this, just the calls. function foo() { console.log(this); } let x = { bar: foo }; foo(); // Window x.bar(); // x let baz = x.bar; baz(); // Window Enter fullscreen mode Exit fullscreen mode Even baz will print Window. It's not a method call, it doesn't follow the method call format! 3. Constructor calls Or new calls (are calls too I suppose). In that case this gets set to the empty object {}. function Foo() { console.log(this); } new Foo(); // {} Foo(); // Window let x = { foo: Foo }; x.foo(); // x Enter fullscreen mode Exit fullscreen mode That's pretty much all there is to it......... ........or is it?! I apologize for this Remember how I told you this is all about function calls, not the functions themselves? Well, I lied. Ok look, let me remind you once again: They made javascript in 10 days! The this rules we've discussed above, they are a bit limiting. So there's three* ways you can override these rules. * don't you dare even mention apply 1. call The special call method on functions allows you to pass your own custom value of this to a function call (or the call's scope I should say). function foo() { console.log(this); } foo.call({ a: 42 }); // { a: 42 } Enter fullscreen mode Exit fullscreen mode 2. bind bind is another builtin method on functions. Much like call it too allows you to pass a custom value for this to the function call. Except unlike call, bind doesn't immediately call the function. It instead returns a special 'bound' functions. function foo() { console.log(this); } let bar = foo.bind({ a: 42 }); foo(); // Window bar(); // { a: 42 } Enter fullscreen mode Exit fullscreen mode 3. Arrow functions Arrow functions are the third way to override the call rules for this described previously. Arrow functions capture the this from the function scope in which they are created. function foo() { const bar = () => { console.log(this); }; return bar; } let bar = foo.call({ a: 42 }); bar(); // { a: 42 } Enter fullscreen mode Exit fullscreen mode So they're essentially the same as defining a normal function but then also binding it. // achieves the same effect function foo() { const bar = (function () { console.log(this); }).bind(this); return bar; } let bar = foo.call({ a: 42 }); bar(); // { a: 42 } Enter fullscreen mode Exit fullscreen mode In summary Yes, no pun in the heading this time (oops). The key takeaways are this: In JS this is associated with the current function scope, and since function scopes are associated with functions calls -- this is associated with calls. Those are the rules but they can be overridden. That is the reason why people are often confused when passing functions referencing this to callbacks. It's also why you were told to use arrow functions if you need to pass them to callbacks. I too was confused about this for a long time. Instead of taking the more sensible approach of reading an article such as this one, I instead decided to implement my own javascript. I wrote a subset of javascript. In that subset of javascript. If you want to go down that rabbit hole, then check out the repo: https://github.com/BlueBlazin/thislang If you want more posts on other javascript or computing related topics let me know on twitter: https://twitter.com/suicuneblue
- An implementation of a subset of javascript in that subset
- An implementation of a subset of JavaScript in that subset of JavaScript
bytenode
- ByteNode: A minimalist bytecode compiler for Node.js
- How to restrict the access to an on premise node server?
-
electron-vite: Easy way to protect your Electron source code
electron-vite inspired by bytenode, the specific implementation:
-
Where do you store api keys or jwt token in an electron app?
take a look into this one, https://github.com/bytenode/bytenode
-
Where to hide or store database key in electron app? (Is it possible to do with c++ addons?)
did you try https://github.com/bytenode/bytenode? take a look, it seems it does what you need
- Delivering an application in CL w.o. source
- How to secure an Electron app with a license key
- Protecting Node code
-
Decompiling Node.js in Ghidra
The title is a bit misleading; the post is about jsc files containing nodejs "bytecode" produced by bytenode.
-
Compile your JS code: New Bytenode support for Electron
It doesn't appear that there is any performance penalty to using Bytenode. There are some benchmark functions in the repository, but certainly more work could be done to test. My gut feeling is that the minor overhead of loading the binary is balanced out by the minor speed increase by giving V8 a pre-compiled file.
What are some alternatives?
mcscript - A programming language for Minecraft Vanilla
electron-bytenode-example - A basic Hello World boilerplate using Webpack to convert Electron Javascript code to binary using Bytenode and the Bytenode Webpack Plugin
webassemblyjs - Toolchain for WebAssembly
asarmor - Protect asar files from extraction
sablejs - 🏖️ The safer and faster ECMA5.1 interpreter written by JavaScript
pkg - Package your Node.js project into an executable [Moved to: https://github.com/vercel/pkg]
cycle - cycle programming/scripting language
pkg - Package your Node.js project into an executable
alternative-interpreters - List of alternative PHP nad JS interpreters and compilers
wat-compiler - webassembly wat text format to binary compiler
deploy - Deployment tools for standalone Common Lisp applications
electron-vite - Next generation Electron build tooling based on Vite 新一代 Electron 开发构建工具,支持源代码保护