Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

install Build StatusGreenkeeper badge

The CommonJS module syntax is one of the most widely accepted conventions in the JavaScript ecosystem. Everyone seems to agree that require and exports are a reasonable way of expressing module dependencies and interfaces, and the tools for managing modular code are getting better all the time.

Much less of a consensus has developed around the best way to deliver CommonJS modules to a web browser, where the synchronous semantics of require pose a non-trivial implementation challenge. This module loader contributes to that confusion, yet also demonstrates that an amply-featured module loader need not stretch into the hundreds or thousands of lines.

Installation

From NPM:

npm install install

From GitHub:

cd path/to/node_modules
git clone git://github.com/benjamn/install.git
cd install
npm install .

Usage

The first step is to create an install function by calling the makeInstaller method. Note that all of the options described below are optional:

varinstall=require("install").makeInstaller({// Optional list of file extensions to be appended to required module// identifiers if they do not exactly match an installed module.extensions: [".js",".json"],// If defined, the options.fallback function will be called when no// installed module is found for a required module identifier. Often// options.fallback will be implemented in terms of the native Node// require function, which has the ability to load binary modules.
fallback,// Boolean flag indicating whether the installed code will be running in// a web browser.
browser,// List of fields to look for in package.json files to determine the// main entry module of the package. The first field listed here whose// value is a string will be used to resolve the entry module. Defaults// to just ["main"], or ["browser", "main"] if options.browser is true.mainFields: ["browser","main"],});

The second step is to install some modules by passing a nested tree of objects and functions to the install function:

varrequire=install({"main.js"(require,exports,module){// On the client, the "assert" module should be install-ed just like// any other module. On the server, since "assert" is a built-in Node// module, it may make sense to let the options.fallback function// handle such requirements. Both ways work equally well.varassert=require("assert");assert.strictEqual(// This require function uses the same lookup rules as Node, so it// will find "package" in the "node_modules" directory below.require("package").name,"/node_modules/package/entry.js");exports.name=module.id;},node_modules: {package: {// If package.json is not defined, a module called "index.js" will// be used as the main entry point for the package. Otherwise the// exports.main property will identify the entry point."package.json"(require,exports,module){exports.name="package";exports.version="0.1.0";exports.main="entry.js";},"entry.js"(require,exports,module){exports.name=module.id;}}}});

Note that the install function merely installs modules without evaluating them, so the third and final step is to require any entry point modules that you wish to evaluate:

console.log(require("./main").name);// => "/main.js"

This is the "root" require function returned by the install function. If you're using the install package in a CommonJS environment like Node, be careful that you don't overwrite the require function provided by that system.

If you need to change the behavior of the module object that each module function receives as its third parameter, the shared Module constructor is exposed as a property of the install function returned by the makeInstaller factory:

varinstall=makeInstaller(options);varproto=install.Module.prototype;// Wrap all Module.prototype.require calls with some sort of logging.proto.require=wrapWithLogging(proto.require);// Add a new method available to all modules via module.newMethod(...).proto.newMethod=function(){...};

Many more examples of how to use the install package can be found in the tests.

About

Minimal JavaScript module loader

Resources

Stars

66 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages