Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

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

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Node2Browser

Just a simple tool to port node modules to the browser.

What it does

You code your project using the normal Node module structure, then feed the tool with the main file (typically <project path>/lib/index.js or similar). Node2browser figures out the dependency tree, by parseing calls to the require function, and then concatenates the modules in a single fat javascript file, in a way that all the dependencies of a module have been already loaded when the module is required. Modules are loaded using self-invoking anonimous functions.

Features

node2browser simply figures out the dependency tree of your modules, then squash them into a single file. The modules will then be available in the browser using the window.node2browser.require function, which works pretty the same way as Node's require.

Default modules:

  • process: has only one method, nextTick (simulated using window.setTimeout), and an empty array argv
  • util:
    • inspect, just call console.log
    • inherits, stripped from nodejs

Install and Usage

git clone git://github.com/cheng81/node2browser.git
cd node2browser
bin/node2browser <initfile> <outfile> <nodemodulesdir> <requiredAs>

initfile is tipically the index.js in your project. From there, the tool will figure out which file are required where.

outfile is where the "compiled" javascript will be. Default is dist/out.js.

nodemodulesdir is where the node modules that you want to include will be.

requiredAs is how you will require the compiled main module in the browser. For example, if you compile your ~/Projects/myLib/lib/index.js, you might want to set this parameter as myLib. Default main.

Sorry, for now it's very stupid and only single-file modules can be used -it's sufficient for me, if you need more drop a request to frza-AT-itu-DOT-dk-.

A simple example is included the in test directory, which also uses the wu library. Try it out with

bin/node2browser test/test1.js test/out.js test/node myfoo

After the execution the test/out.js file is produced, which includes test1.js, test2.js and node/wu.js modules. To require the initial file test1.js, you can either require ./test1 or myfoo. The file test/index.html uses the produced file, plus shows also how to use node2browser in the browser.

In the Browser

To use the loaded modules in the browser, just use the window.node2browser.require function like you would use the Nodejs one, e.g.:

var require = window.node2browser.require
var mymod = require('./mymod')

By default ./mymod will be resolved against the directory of the initfile above.

Limitations

The grammar that extract the require calls is dumb. Specifically, it will:

  • consider valid a commented call
  • not recognize a call if you alias the require function (e.g. var r = require; r('bla') will not work)

Circular dependencies are not handled. The tool will stop with an exception when a circular dependency is found (and I am not sure if even node itself handle circular dependencies).

The parser has been built using the incredibly cool PEGjs peg parser.

About

simple tool to port node code to the browser

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages