electrino
electrino copied to clipboard
Support for importing js files and modules via require
Modules are a key aspect in creating an application. In Node.js, modules can be installed and imported.
This PR adds support for importing js files, as well as modules that could come from Node packages.
What this PR does:
- Modifies the
requireimplementation - Adds a method to create a
JSContextwhich is a duplicate of the default one- This is done as Apple has not implemented the
-copyWithZone:method
- This is done as Apple has not implemented the
- Renamed the
test-appfolder toapp - Changed the
appgroup to a folder reference, so that files can be easily copied without having to manually add them to aCopy Filesphase.
If you have any questions, feel free to ask :)
I've created this PR: https://github.com/ninjaprawn/electrino/pull/1/files
That adds better support. Nevertheless the whole thing should follow this documentation: https://nodejs.org/api/modules.html#modules_all_together
Some things that we will need to implement:
- requires to relative paths should start with
./or../ - Inject variables like
__dirnameand__filename - the
moduleobject has more things (such as theloadedattribute), and I think this is the object that should be stored in the require cache (not theexportsone, although obviouslymodule.exportsis the thing that needs to be returned when requiring the module). - a module should only be loaded once. So first we should check if it exists in the require cache.
- Right before evaluating a module it should be put in the require cache to avoid infinite loops if there are require cycles. For example: module A requires module B and this one requires A. The second time we require A, we check if it's in the cache and we don't load it again.
I think that once we've established where the project is heading, we will add those features in a reliable way.
Hi @ninjaprawn @gimenete @kittsuphatt !
Thanks very much for this. (I failed at Github and just didn't notice this pull request until now.)
I'll take a look and merge ASAP.
@ninjaprawn would be awesome if you can fix the merge conflicts. I can merge this after testing it out
Oh man -- when I wrote "ASAP", I didn't mean to imply "20 days later". Sorry for that. I've just been swamped.
I can check out and fix the merge conflicts on this one tomorrow, I think.
I won't be able to do much for the next couple of days (I'm flying back from WWDC to Australia, which is a long time). If nothing is done until then, I'll be more than happy to fix the conflicts
What ever happened to this project?
@ninjaprawn is this PR ready to review?
@ninjaprawn please help with the merge conflicts!
sorry this took so long! should be good to go now
@pojala let's move ahead with this PR! 😄
this proj is still active?
@gimenete Should this be closed since your PR was merged?
@amilajack my PR improved things, but was not implementing everything. I'm unsure about the state of the current implementation.
The implementation should follow this spec https://nodejs.org/api/modules.html#modules_all_together
@ninjaprawn Would love if you could the merge conflicts one last time. I'll definitely merge this right after you fix them.
@ninjaprawn could you help us out with the merge conflicts - we are looking to merge this in.