Technology sharing

JS [detailed explanation] ES6 moduli specification vs CommonJS moduli specification

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Scapus cuiusque moduli est, ac CommuniJS specificatio moduli per defaltam adoptatur.

Exeuntium ES6 moduli pk traditionalis CommonJS moduli

propriumCommonJSES6 Modularity
Exportareexports objectexport Keywords
importrequire()officiumimport Keywords
loading modusSynchroniseasynchronous "
supplicium modusSingletonSingleton
Dependentiaestaticdynamic
Figura lignum quatientesnon supportauxilium

loading modus

  • CommonJS synchronum est, codicem exsecutionem sistit, donec modulus oneratur.
  • Moduli ES6 asynchroni sunt, codicem prosequi potest dum modulus postea oneratus erit.

supplicium modus

Executio modulorum utriusque CommuniJS et ES6 est singleton: modulus semel tantum oneratus, omnesque ad moduli instantias demonstrabunt.

Dependentiae

  • CommonJS est static et moduli clientelae tempore compilatae determinatae.
  • Moduli ES6 sunt dynamici et moduli clientelae determinatae in runtime

Figura lignum quatientes

Optimization ars ad codicem insuetum a JavaScript manipulis removendum.

  • CommonJS non sustinet arbor quassans, et insueta code in modulis etiam oneratur.
  • ES6 modularitas ligni concussionem sustinet, quae codicem insuetum automatice removet ad magnitudinem sarcinae minuendam.

Tribus modis ut ES6 modulorum

  1. Set in package.json file "type": "module", ita Node.js omnia .js lima ut modulorum ES6 aget.
  2. Mutata lima extensio est .mjsita ut Node.js ipso modulo ES6 tractaturus sit.
  3. Add in scriptor tag type="module" Attributes

ES6 moduli syntaxis

default export import default export

Quisque modulus potest tantum habere unum default export

let a = 1
// 默认导出 a
export default a
  • 1
  • 2
  • 3
// 导入默认时,可以命其他名称
import b from './demo.js'

console.log(b)
  • 1
  • 2
  • 3
  • 4

Function expressions / anonyma munera directe adhiberi possunt sicut default exportationes

export default function myFunc() {}
  • 1
export default function() {}
  • 1

Multiplex exportare et importare {} exportare

let a = 1
let b = 2

export { a, b }
  • 1
  • 2
  • 3
  • 4
// 导入多项时,必须与导出名对应
import { a, b } from './demo.js'

console.log(a, b)
  • 1
  • 2
  • 3
  • 4

Rename ut cum educendi

let a = 1
let b = 2

export { a as c, b as d }
  • 1
  • 2
  • 3
  • 4
// 导入时,只能导入新的名称
import { c, d } from './demo.js'

console.log(c, d)
  • 1
  • 2
  • 3
  • 4

Educendi alios moduli specificationes

export { name1, name2, ... } from 'module-name'
  • 1

Importare omnia exportata per modulum import *

export let a = 1;
export let b = 2;
  • 1
  • 2
// 通过 as 重命名为一个变量(值为对象)
import * as myModule from "./demo.mjs";

console.log(myModule.a);
console.log(myModule.b);
  • 1
  • 2
  • 3
  • 4
  • 5

Rename ut cum inferentes

import {trunc as StringLib} from "../lib/string.js"
import {trunc as MathLib} from "../lib/math.js"
  • 1
  • 2

Inferre files in forma json

import pkg from "./package.json" assert { type: "json" };
  • 1
const { default: jsonObject } = await import('./file.json', {
  assert: {
    type: 'json'
  }
});
  • 1
  • 2
  • 3
  • 4
  • 5

Import Communes moduli

import * as 自定义名称  from '模块名称'
  • 1

CommuniJS moduli syntaxis

  • Modulus est objectum cuiusque moduli, quod habet proprium exportationum (etiam objectum valorem attributum)
  • Cum importandis per require(), exportationes attributi moduli obiecti in modulo exportato obtinebuntur.
  • Intra eundem modulum, exportationes et moduli non miscentur. exportationes ad varias res exportandas, sicut hoc modo ad confusionem et mores vagus.

Exportare et importare unum item module.exports

Exportare

module.exports = "朝阳";
  • 1

import

const demoModule = require("./demo.js");

console.log(demoModule); // 朝阳
  • 1
  • 2
  • 3

Exportare et importare plures exportationes

Exportare

exports.a = 1;
exports.b = 2;
  • 1
  • 2

import

const demoModule = require("./demo.js");

console.log(demoModule); // { a: 1, b: 2 }
  • 1
  • 2
  • 3