Node.js on top of SpiderMonkey
JavaScript C++ C HTML POV-Ray SDL Python Other
Latest commit 5fb635b Feb 14, 2017 @mykmelez mykmelez committed on GitHub Merge pull request #362 from mykmelez/merge-node
merge Node
Permalink
Failed to load latest commit information.
.github Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Jan 11, 2017
benchmark benchmark: fix typos Feb 10, 2017
deps Merge pull request #362 from mykmelez/merge-node Feb 13, 2017
doc lib: deprecate node --debug at runtime Feb 10, 2017
lib Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
src Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
test Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
tools Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
.editorconfig tools: disallow trailing whitespace for markdown Nov 21, 2016
.eslintignore benchmark: don't lint autogenerated modules Jan 12, 2017
.eslintrc.yaml Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
.gitattributes src: limit .gitattributes eol to vcbuild.bat Jan 13, 2015
.gitignore Merge remote-tracking branch 'node/master' into nodemerge Dec 19, 2016
.mailmap doc: update authors list Sep 4, 2016
.remarkrc doc: enable no-file-name-articles remark-lint rule Sep 27, 2016
.travis.yml make -j2 on all Mac builds (fixes #210) (#354) Jan 25, 2017
AUTHORS doc: update AUTHORS list to fix name Jan 23, 2017
BSDmakefile node: rename from io.js to node Aug 23, 2015
BUILDING.md Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Jan 25, 2017
CHANGELOG.md 2017-01-31, Version 7.5.0 (Current) Feb 1, 2017
CODE_OF_CONDUCT.md doc: enable first-heading-level remark-lint rule Sep 27, 2016
COLLABORATOR_GUIDE.md doc: typographical fixes in COLLABORATOR_GUIDE.md Feb 4, 2017
CONTRIBUTING.md doc: fix linting command for vcbuild Feb 6, 2017
GOVERNANCE.md doc: update minute-taking procedure for CTC Nov 6, 2016
LICENSE test: remove dependency on node-weak Feb 11, 2017
Makefile build: add node-inspect integration test Feb 13, 2017
README.md update docs on running Node built against external SpiderMonkey Oct 1, 2016
ROADMAP.md tools: enable more remark-lint rules Sep 25, 2016
WORKING_GROUPS.md meta: decharter the http working group Jan 6, 2017
android-configure build: update android-configure script for npm Apr 22, 2016
common.gypi Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
configure Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
node.gyp Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017
vcbuild.bat Merge remote-tracking branch 'nodejs-upstream/master' into merge-node Feb 13, 2017

README.md

SpiderNode: Node.js on SpiderMonkey

This project is a port of Node.js on top of SpiderMonkey, the JavaScript engine in Firefox. We're still in the very early stages of the port, and a lot of work remains to be done before Node works.

Build Status

Goals

Right now we're focused on using this project in the Positron project. This means that we will need to finish SpiderShim to the extent necessary for Node.js to work. In the future, we may look into finishing implementing the features of the V8 API that Node.js does not use, in order to provide a V8 API shim layer out of the box in SpiderMonkey. The SpiderShim code is being developed with that long term goal in mind.

How it works

To enable building and running Node.js with SpiderMonkey, a V8 API shim (SpiderShim) is created on top of the SpiderMonkey API. This is based on Microsoft's node-chakracore, but it doesn't share much code with it besides the build system integration.

Current status

This is a work in progress. Node can now be successfully built on top of SpiderMonkey, and the very basics seem to work, but there are probably still a lot of issues to discover and fix.

We have implemented a fair portion of the V8 API. More specifically these tests are currently passing. Many of those tests have been ported from the V8 API tests.

How to build

Before building please make sure you have the prerequisites for building Node.js as documented here.

Building on any OS other than Linux or OS X has not been tested.

Build Command:

$ ./configure [options]
...
$ make
...
$ ./node -e 'console.log("hello from " + process.jsEngine)'
hello from spidermonkey

Where options is zero or more of:

  • --engine: The JavaScript engine to use. The default engine is spidermonkey.
  • --debug: Also build in debug mode. The default build configuration is release.
  • --enable-gczeal: Enable SpiderMonkey gc-zeal support. This is useful for debugging GC rooting correctness issues.
  • --with-external-spidermonkey-release and --with-external-spidermonkey-debug: Enable building against an out-of-tree SpiderMonkey. Expects a path to a built SpiderMonkey object directory (in release and debug modes, respectively)

If you build against an out-of-tree SpiderMonkey, you must include the SpiderMonkey library path in LD_LIBRARY_PATH (DYLD_LIBRARY_PATH on Mac) when running Node, i.e.:

$ LD_LIBRARY_PATH=path/to/obj-dir/dist/bin ./node -e 'console.log("hello from " + process.jsEngine)'

To run the API tests, do:

$ ./deps/spidershim/scripts/run-tests.py

Repository structure

The repository is based on node-chakracore. The interesting bits can be found in the deps/spidershim directory.