Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - provegard/nashorn-require: A Nashorn implementation of CommonJS Modules/1.1.1 · GitHub
Skip to content
This repository was archived by the owner on Aug 10, 2026. It is now read-only.

Repository files navigation

nashorn-require

Overview

A Nashorn implementation of CommonJS Modules/1.1.1.

The initial goal was to pass all CommonJS Modules tests. Since that test suite is not complete with respect to the specification, the missing tests have been added. In addition, parts of the NodeJS module specification have been implemented as well. Furthermore, since we're in Java land, nashorn-require can load modules from inside JAR files.

The following test blocks exists:

  • commonjs/tests/modules - the modules tests from the CommonJS repo (as a sub module).
  • tests/commonjs-missing - tests missing from the CommonJS repo for mandatory features.
  • tests/commonjs-optional - tests missing from the CommonJS repo for optional features.
  • tests/nodesjs - tests for NodeJS-specific features.
  • tests/misc - tests for other things, for example implementation details.

Implemented features

TBD

How to use

Build the JS file:

$ npm install .
$ npm run build

Make the nashorn-require.js file available somewhere for your code to access.

Invoke the following Nashorn code:

var nashornRequirePath = ...; // you're on your own here
var nashornRequireOptions = {}; // see below
var initRequire = load(nashornRequirePath);
initRequire(nashornRequireOptions);

Options

The following options are recognized:

  • mainFile (required) - the path to the main module of the application. This is the module for which require.main doesn't return undefined. Its parent directory is used as the initial top-level path (against which to resolve non-relative module paths).
  • extensions - list of extensions to search when a module is required. Defaults to ['.js', ''], which means that a module required without extension may exist without the extension or with a ".js" extensions. Note that currently specifying this option will overwrite the default list.
  • debug - set to true to enable debug output.
  • classLoader - an optional class loader that will be used for loading a top-level resource module if it's not found in any of the fixed or user-defined module paths.

Additional configuration

  • Items added to require.paths will be treated as top-level paths. It's possible to add a path to a JAR file.

How to develop

Use npm test to run all tests. This will build and lint the code first.

Use npm run lint to just lint. This will build the code first.

Use npm run build to build the code. The resulting file will be in the dist folder.

How to contribute

  • Open an issue for something you feel is broken or missing.
  • Submit a PR if you want to help fix an issue. Please discuss the issue before doing that.

There are no explicit code guidelines. Make sure the linter is happy and that all code is test-driven! :-)

Related projects

I have tried to use this require implementation, but I encountered problems with Windows paths. I also found the implementation a bit inflexible, e.g. when it comes to which class loader to use when loading embedded resources. On the plus side, it supports Rhino.

Didn't try this one, but there are no tests and the author's comments towards the end of the README are a bit disheartening.

About

A Nashorn implementation of CommonJS Modules/1.1.1

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages