Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does it mean by live bindings?

I am following a tutorial and it says

ES modules uses live bindings. It means a feature to support cyclical dependencies.

But I don't clearly understand this concept. What does this mean?

like image 909
Ishan Patel Avatar asked Sep 06 '18 19:09

Ishan Patel


1 Answers

Live bindings is a concept introduced in ES modules. It means that when the exporting module changes a value, the change will be visible from the importer side. This is not the case for CommonJS modules. Module exports are copied in CommonJS. Hence importing modules cannot see changes happened on the exporter side.


ESM

counter.mjs

export let count = 1;
export function increment() {
    ++count;
}

index.mjs

import { count, increment } from './counter.mjs';
console.log(count);
increment();
console.log(count);

Output

$ node --experimental-modules index.mjs
1
2

CJS

counter.js

let count = 1;
function increment() {
    ++count;
}

exports.count = count;
exports.increment = increment;

index.js

const { count, increment } = require('./counter.js');
console.log(count);
increment();
console.log(count);

Output

$ node index.js
1
1

More resources on the topic:

  • What do ES6 modules export? by Axel Rauschmayer
  • ES modules: A cartoon deep-dive by Lin Clark
  • Chapter on Modules in Exploring JS by Axel Rauschmayer
like image 105
mkubilayk Avatar answered Nov 10 '22 01:11

mkubilayk