<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JavaScript and Node.js Modules: Complete Guide]]></title><description><![CDATA[<p dir="auto">Modularity is a fundamental principle of modern development, allowing code to be organized into independent, reusable components. JavaScript’s module system evolution has led to several standards, each with its own specifics and use cases.</p>
<h2>Main JavaScript Module Systems</h2>
<h3>1. CommonJS - Server Standard</h3>
<p dir="auto"><strong>Usage:</strong> Originally created for Node.js, now also used in browsers via bundlers.</p>
<p dir="auto"><strong>Syntax:</strong></p>
<pre><code class="language-js">// Export
module.exports = { functionA, variableB };
exports.functionC = functionC;

// Import
const module = require('./module');
const { functionA } = require('./module');
</code></pre>
<p dir="auto"><strong>Support:</strong></p>
<ul>
<li>Node.js: all versions</li>
<li>Browsers: via Webpack, Browserify, Rollup</li>
</ul>
<h3>2. AMD (Asynchronous Module Definition)</h3>
<p dir="auto"><strong>Usage:</strong> Designed for browsers with asynchronous loading.</p>
<p dir="auto"><strong>Syntax:</strong></p>
<pre><code class="language-js">// Module definition
define(['dependency'], function(dependency) {
  return {
    exportedFunction: function() {
      // use dependency
    }
  };
});

// Module loading
require(['module'], function(module) {
  module.exportedFunction();
});
</code></pre>
<p dir="auto"><strong>Support:</strong></p>
<ul>
<li>Browsers: via RequireJS</li>
<li>Node.js: via wrappers</li>
</ul>
<h3>3. UMD (Universal Module Definition)</h3>
<p dir="auto"><strong>Usage:</strong> Cross-platform solution compatible with CommonJS, AMD and global variables.</p>
<p dir="auto"><strong>Syntax:</strong></p>
<pre><code class="language-js">(function(root, factory) {
  if (typeof define === 'function' &amp;&amp; define.amd) {
    // AMD
    define(['exports'], factory);
  } else if (typeof exports === 'object' &amp;&amp; typeof exports.nodeName !== 'string') {
    // CommonJS
    factory(exports);
  } else {
    // Global variable
    factory((root.myModule = {}));
  }
}(typeof self !== 'undefined' ? self : this, function(exports) {
  // Module code
  exports.example = function() {};
}));
</code></pre>
<h3>4. ES6 Modules - Native Standard</h3>
<p dir="auto"><strong>Usage:</strong> Modern ECMAScript standard supported by all current environments.</p>
<p dir="auto"><strong>Syntax:</strong></p>
<pre><code class="language-js">// Export
export const name = 'value';
export function functionName() {};
export default function() {};

// Import
import { name, functionName } from './module';
import defaultExport from './module';
</code></pre>
<h2>Browser Support</h2>
<h3>ES6 Modules in Browsers</h3>
<ul>
<li>Chrome: since version 61 (2017)</li>
<li>Firefox: since version 60 (2018)</li>
<li>Safari: since version 11 (2017)</li>
<li>Edge: since version 16 (2017)</li>
</ul>
<p dir="auto"><strong>Usage:</strong></p>
<pre><code class="language-html">&lt;!-- Module loading --&gt;
&lt;script type="module" src="app.js"&gt;&lt;/script&gt;

&lt;!-- Inline module --&gt;
&lt;script type="module"&gt;
  import { functionName } from './module.js';
  functionName();
&lt;/script&gt;
</code></pre>
<h3>Legacy Browser Support</h3>
<p dir="auto">For browsers without ES6 module support use:</p>
<ul>
<li>Transpilation (Babel)</li>
<li>Module bundlers (Webpack, Rollup, Parcel)</li>
<li>Combination of type=“module” and nomodule:</li>
</ul>
<pre><code class="language-html">&lt;script type="module" src="app.es6.js"&gt;&lt;/script&gt;
&lt;script nomodule src="app.legacy.js"&gt;&lt;/script&gt;
</code></pre>
<h2>Node.js Support</h2>
<h3>Module Support History</h3>
<ul>
<li>Node.js 0.1.0-8.x: CommonJS only</li>
<li>Node.js 8.5.0: experimental ES6 module support (with <code>--experimental-modules</code> flag)</li>
<li>Node.js 12.0.0: improved ES6 module support</li>
<li>Node.js 13.2.0: stable ES6 module support without flags</li>
<li>Node.js 14.0.0+: full ES6 module support in LTS releases</li>
</ul>
<h3>Using ES6 Modules in Node.js</h3>
<p dir="auto">.mjs extension:</p>
<pre><code class="language-js">// module.mjs
export const value = 10;

// app.mjs
import { value } from './module.mjs';
</code></pre>
<p dir="auto">“type” field in package.json:</p>
<pre><code class="language-json">{
  "type": "module",
  "main": "app.js"
}
</code></pre>
<p dir="auto">Mixed projects:</p>
<ul>
<li>.js files - CommonJS</li>
<li>.mjs files - ES6 modules</li>
<li>.cjs files - CommonJS (when “type”: “module”)</li>
</ul>
<h2>Practical Recommendations</h2>
<h3>Module System Selection</h3>
<ul>
<li>New projects: use ES6 modules</li>
<li>Libraries: support both CommonJS and ES6 (via dual export)</li>
<li>Legacy projects: stay with CommonJS until refactoring</li>
</ul>
<h3>Cross-Module System Compatibility</h3>
<p dir="auto">Importing CommonJS in ES6:</p>
<pre><code class="language-js">import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const commonJSModule = require('./common-js-module.cjs');
</code></pre>
<p dir="auto">Importing ES6 in CommonJS (with dynamic import):</p>
<pre><code class="language-js">async function loadModule() {
  const es6Module = await import('./es6-module.mjs');
}
</code></pre>
<h3>Build Optimization</h3>
<ul>
<li>Use tree-shaking with ES6 modules</li>
<li>Minimize circular dependencies</li>
<li>Split code with dynamic imports</li>
</ul>
<h3>Migration from CommonJS to ES6 Modules</h3>
<ol>
<li>Rename files to .mjs or set “type”: “module”</li>
<li>Replace module.exports with export</li>
<li>Replace require() with import</li>
<li>Update relative import paths (add extensions)</li>
<li>Fix __dirname and __filename references</li>
</ol>
<h2>Migration Example</h2>
<p dir="auto"><strong>Before (CommonJS):</strong></p>
<pre><code class="language-js">// math.js
const PI = 3.14;
function sum(a, b) { return a + b; }
module.exports = { PI, sum };

// app.js
const { PI, sum } = require('./math');
console.log(sum(5, 10));
</code></pre>
<p dir="auto"><strong>After (ES6 modules):</strong></p>
<pre><code class="language-js">// math.js
export const PI = 3.14;
export function sum(a, b) { return a + b; }

// app.js
import { PI, sum } from './math.js';
console.log(sum(5, 10));
</code></pre>
<h2>Module Tools</h2>
<p dir="auto">Bundlers and Transpilers</p>
<ul>
<li>Webpack: supports all module systems</li>
<li>Rollup: optimized for ES6 modules</li>
<li>Babel: transpiles ES6+ to compatible code</li>
<li>Parcel: zero configuration, supports all formats</li>
</ul>
<p dir="auto">Utilities</p>
<ul>
<li>esm: package for using ES6 modules in Node.js</li>
<li>@babel/plugin-transform-modules-commonjs: transforms ES6 to CommonJS</li>
</ul>
<p dir="auto">Conclusion</p>
<p dir="auto">JavaScript’s module ecosystem has evolved significantly, with ES6 modules becoming the universal solution for all platforms. For new projects, use ES6 modules with transpilation and bundling for backward compatibility.</p>
<p dir="auto">For existing CommonJS projects, plan gradual migration to ES6 modules using modern Node.js features and bundlers. This improves performance, enables tree-shaking, and simplifies long-term maintenance.</p>
<p dir="auto">Regardless of the chosen module system, remember the core principles of modularity: loose coupling, strong cohesion, and clear interfaces between system components.</p>
]]></description><link>https://forum.exlends.ru/topic/221/javascript-and-node.js-modules-complete-guide</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 08:17:26 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/221.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Aug 2025 11:47:23 GMT</pubDate><ttl>60</ttl></channel></rss>