Módulos
Tipos
Cenários
/codes/ecma/modules/function-sum/index.js
function sum(a, b) {
  return a + b;
}
 
console.log(sum(2, 1)); //=> 3
 /codes/ecma/modules/function-sum/index.js
function sum(a, b) {
  return a + b;
}
 
console.log(sum(2, 1)); //=> 3
 src
├── lib.js
└── main.jssrc
├── lib.js
└── main.js| Uma Função | Várias Funções | |
|---|---|---|
| CJS | 1.1 | 2.1 | 
| ESM | 1.2 | 2.2 | 
Cenário 1.1 - Uma função no CJS
/codes/ecma/modules/cjs-default/lib.js
function sum(a, b) {
  return a + b;
}
 
module.exports = sum;
 /codes/ecma/modules/cjs-default/lib.js
function sum(a, b) {
  return a + b;
}
 
module.exports = sum;
 /codes/ecma/modules/cjs-default/main.js
const sum = require('./lib.js');
 
console.log(sum(2, 1)); //=> 3
 /codes/ecma/modules/cjs-default/main.js
const sum = require('./lib.js');
 
console.log(sum(2, 1)); //=> 3
 Cenário 1.2 - Uma função no ESM
/codes/ecma/modules/esm-default/lib.js
function sum(a, b) {
  return a + b;
}
 
export default sum;
 /codes/ecma/modules/esm-default/lib.js
function sum(a, b) {
  return a + b;
}
 
export default sum;
 /codes/ecma/modules/esm-default/main.js
import sum from './lib.js';
 
console.log(sum(2, 1)); //=> 3
 /codes/ecma/modules/esm-default/main.js
import sum from './lib.js';
 
console.log(sum(2, 1)); //=> 3
 Warning: To load an ES module, set “type”: “module” in the package.json or use the .mjs extension.
/codes/ecma/modules/esm-default/package.json
{
  "name": "module-esm-default",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
 /codes/ecma/modules/esm-default/package.json
{
  "name": "module-esm-default",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
 Cenário 2.1 - Várias funções no CJS
/codes/ecma/modules/cjs-named/lib.js
function sum(a, b) {
  return a + b;
}
 
function minus(a, b) {
  return a - b;
}
 
module.exports = { sum, minus };
 /codes/ecma/modules/cjs-named/lib.js
function sum(a, b) {
  return a + b;
}
 
function minus(a, b) {
  return a - b;
}
 
module.exports = { sum, minus };
 /codes/ecma/modules/cjs-named/main.js
const { sum, minus } = require('./lib.js');
 
console.log(sum(2, 1)); //=> 3
console.log(minus(2, 1)); //=> 1
 /codes/ecma/modules/cjs-named/main.js
const { sum, minus } = require('./lib.js');
 
console.log(sum(2, 1)); //=> 3
console.log(minus(2, 1)); //=> 1
 Cenário 2.2 - Várias funções no ESM
/codes/ecma/modules/esm-named/lib.js
function sum(a, b) {
  return a + b;
}
 
function minus(a, b) {
  return a - b;
}
 
export { sum, minus };
 /codes/ecma/modules/esm-named/lib.js
function sum(a, b) {
  return a + b;
}
 
function minus(a, b) {
  return a - b;
}
 
export { sum, minus };
 /codes/ecma/modules/esm-named/main.js
import { sum, minus } from './lib.js';
 
console.log(sum(2, 1)); //=> 3
console.log(minus(2, 1)); //=> 1
 /codes/ecma/modules/esm-named/main.js
import { sum, minus } from './lib.js';
 
console.log(sum(2, 1)); //=> 3
console.log(minus(2, 1)); //=> 1
 Resumo dos Cenários
| Uma Função | Várias Funções | 
|---|---|
| CJS CJS  | CJS CJS  | 
| ESM ESM  | ESM ESM  | 
Named e Default
/codes/ecma/modules/esm-default-named/lib.js
export const PI = 3.14;
 
export function sum(a, b) {
  return a + b;
}
 
export function minus(a, b) {
  return a - b;
}
 
export default { sum, minus, PI };
 /codes/ecma/modules/esm-default-named/lib.js
export const PI = 3.14;
 
export function sum(a, b) {
  return a + b;
}
 
export function minus(a, b) {
  return a - b;
}
 
export default { sum, minus, PI };
 /codes/ecma/modules/esm-default-named/main.js
import Math, { sum } from './lib.js';
 
console.log(sum(1, 1));
console.log(Math.minus(1, 1));
 /codes/ecma/modules/esm-default-named/main.js
import Math, { sum } from './lib.js';
 
console.log(sum(1, 1));
console.log(Math.minus(1, 1));
 NPM
/codes/ecma/modules/esm-npm/lib.js
export const PI = 3.14;
 
export function sum(a, b) {
  return a + b;
}
 
export function minus(a, b) {
  return a - b;
}
 
export default { sum, minus, PI };
 /codes/ecma/modules/esm-npm/lib.js
export const PI = 3.14;
 
export function sum(a, b) {
  return a + b;
}
 
export function minus(a, b) {
  return a - b;
}
 
export default { sum, minus, PI };
 /codes/ecma/modules/esm-npm/main.js
import { sqrt } from 'mathjs';
import Math, { sum } from './lib.js';
 
console.log(sum(1, 1));
console.log(Math.minus(1, 1));
 
console.log(sqrt(16));
 /codes/ecma/modules/esm-npm/main.js
import { sqrt } from 'mathjs';
import Math, { sum } from './lib.js';
 
console.log(sum(1, 1));
console.log(Math.minus(1, 1));
 
console.log(sqrt(16));
 $ npm install mathjs$ npm install mathjs/codes/ecma/modules/esm-npm/package.json
{
  "type": "module",
  "dependencies": {
    "mathjs": "^11.7.0"
  }
}
 /codes/ecma/modules/esm-npm/package.json
{
  "type": "module",
  "dependencies": {
    "mathjs": "^11.7.0"
  }
}