I really like how you asked the mailing list how to do this, figured it out, and then posted a detailed tutorial.
THIS is how this list should be used! Good work. -- Charlie McConnell On Thu, Jan 16, 2014, at 11:22 AM, Kevin Ingwersen wrote: Hey hey! I just did some reeeeally cool find-out that I am really happy about - and since, I want to share that too! :3 Caution: Make sure you have your toolchai (Xcode, gcc, MSYS, …) ready to use and a copy of the latest nodejs source code. I myself am using v0.10.24. Okay, let’s go. 1. Your module or addon needs preparation. Usual JS modules will work nicely, but…you need to make sure that you dont use too many modules. The ultra-basic require you will be having does not have all the functions you may expect. The in-binary require function seems to only look up actual filenames. In example, using require(„myFile“) will result in an internal lookup for myFile.js . Therefore, make sure your JS module is not using path-wise lookups - and especially, no subfolders. Subfolders simply dont exist in memory ;) If you have a native addon, then you need to change your entry-code’s NODE_MODULE declaration. If it looked like this before: NODE_MODULE(ph7, InitAll) Then you now need to make it look like this: NODE_MODULE(node_ph7, InitAll) You’re best off by creating a copy of your module entirely, so you aren’t modifying your working copies. 2. Telling GYP about the new files Open node.gyp in a text editor, and locate the section named library_files. This is a long JSON array, and at the bottom, add your module files. I recommend creating a new folder called extra/ and placing your stuff inside there. And very importantly, you need to add a very special file to the list: 'lib/_third_party_main.js', This file will be called instead of nodejs’ main() function. As it does not exist, you may comment out this entry for now - but we’ll need it later. I have NOT tested this without this file - for now, I am just assuming you want your script to run always when the binary is launched, and want to pull the several moduels form within the binary itself. After you filled this array, it’s time you fill up the native addon array - that is, if you have one. In my case, I do. So, to do so, locate sources, and add your sources at the bottom. If your souces need a custom include path, then you also need to edit include_dirs. 3. Telling the node-code to use your native addon (Not required if you dont use one) If you use a native addon, you must edit just one single file: src/node_extensions.h . The way it needs to be done should be ultra-obvious. But maybe I should explain anyway: This file contains a list of all the „internal extensions“. You may recognize, that all of them are prefixed with node_. That is a prefix to mark it as internal - and which is why I told you to change your native addon’s NODE_MODULE call too. So in that list, add your addon just like any other - save, exit. 4. Building. Now, after you added your sources, library_files, include_dirs and the like, you should have a nice GYP file. So, return to the nodejs source tree’s root, and run ./configure Now you can use whatever you want to. In my case, i used —ninja, and then typed: ninja -C out/Release Once you finished building, locate the new binary. If building and running seems okay, then it’s time to do some really cool things! 5. Implentation time! Before, I was telling you about _third_party_main.js. Now, this doesnt really exist so far. So what we now do, is create it. You may have commented it out previously (by putting a hashtag infront of it, like all the cool twitter kids do :p), but you may now uncomment it in node.gyp. Then, type: touch lib/_third_party_main.js Now you can open that file - and edit it. Note: Please consider the following: - require() only looks up the filenames inside the binary - but no folders, or subfolders, or the like. This is a semi-low-level JS you are doing here. You can still interact with files and everything else like normal, but require acts a bit different than usual. - To link against your native addon, use process.binding(). I,e,: var ph7 = process.binding(„ph7“); The name you have to give in, is the same as the one in NODE_MODULE, just without the node_ prefix. Once you are done, rebuild and test. DONE :D Again, this is more an experiment and soemthing i JUST learned. But I saw projects such as nexe - and i just felt like sharing what I figured out - it could be useful to them. If we can programaticaly edit node.gyp and node_extensions.h, then we actually can patch a source tree in order to allow „native modules“. I am still testing this thing myself, but it surely is something quite interesting. I also haven’t seen process.binding within the API docs or the like. I had to read it off lib/os.js :p Have fun with that lil thing! :D Kind regards, Ingwie. -- -- Job Board: [1]http://jobs.nodejs.org/ Posting guidelines: [2]https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at [3]http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit [4]https://groups.google.com/groups/opt_out. References 1. http://jobs.nodejs.org/ 2. https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines 3. http://groups.google.com/group/nodejs?hl=en?hl=en 4. https://groups.google.com/groups/opt_out -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.