So I’ve built v8, node, and nodewebkit about a thousand times over the last couple of weeks in an attempt to get all of this fixed. What seems to be happening is that the authors of the various packages don’t seem to be concerned about maintaining these dependencies (I am using nodewebkit and atom-shell interchangeably, since they are almost identical.)
Basically, node pulls in some version of Google’s v8 library (which is where the ‘v8’ version comes in.) Node itself also has a module version (‘modules’ in process.versions.) When you “npm install”, it uses the whatever version of node that’s installed on the machine (not the one compiled into nodewebkit), and whatever v8 was compiled into node.
When nodewebkit was built, it pulled in the sources for some other version of node, AND some other version of v8, and then compiles all of it itself. So the v8 compiled into nodewebkit doesn’t match the v8 compiled into node, and even the version of node compiled into nodewebkit doesn’t match the version of node installed on the machine! This is all true even if you install node, and then “npm install nodewebkit” or “npm install atom-shell.” You end up with a package in node_modules that has a completely different version of node and a completely different version of v8 than the node that was used to install it.
This all means that there is simply no hope of using any package where there is a binary module installed by npm, such as fibers.
I’ve spent the last couple of weeks trying to get a v8 built, then a node built with the v8, then a nodewebkit build with my v8 and my node. But then I run into hordes of compile problems, changed sources, removed sources, added sources, missing configuration lines, and the list goes on. None of these projects work together at all.
I’m not sure how the community is missing this, but I think it needs to be rectified. Instead of pulling in these sources into their own projects, they need to pull the dependent projects, either as .o or .so, and just use them as the dependent projects are released. That way everyone always uses at least some known, standard, tagged, version of dependencies like v8 and node.
Please somebody tell me that I am wrong, and that I am missing something fundamental. I have got to get my company’s project to a point where I can run my application natively on various desktops.
And if I’m right, and this really is a valid thing for the community to do, I sure would like to understand why, so that I can at least explain it to the people holding me accountable for making this work.