Node.js supports ECMAScript modules for few years now and if you still consider switching from the CommonJS, there are a couple of good arguments for.
First, enabling the module subsystem is as easy as adding
... "type": "module", ...
to the package.json. Then, modules can be exported/imported, both default and named conventions are supported:
// foo.js
function foo(n) {
return n+1;
}
function bar(n) {
return n-1;
}
function qux(n) {
return n-2;
}
export { bar };
export { qux };
export default foo;
// app.js
import foo from './foo.js';
import { bar, qux } from './foo.js';
console.log( foo(5) );
console.log( bar(5) );
console.log( qux(5) );
Modules can reference other modules recursively, the old good CommonJS supports cycles too but here it's even easier:
// a.js
import { b } from './b.js';
function a(n) {
if ( n > 1 ) {
console.log( `a: ${n}` );
return b( n-1 );
} else {
return 1;
}
}
export { a };
// b.js
import { a } from './a.js';
function b(n) {
if ( n > 1 ) {
console.log( `b: ${n}` );
return a( n-1 );
} else {
return 1;
}
}
export { b };
// app.js
import { a } from './a.js';
console.log( a(7) );
Modules support top-level await
// app.js console.log( await 7 );
And last but not least, modules interoperate with existing infrastructure
// app.js
import http from 'http';
import express from 'express';
var app = express();
app.get('/', (req, res) => {
res.end( 'hello world');
});
http.createServer( app ).listen(3000, () => {
console.log( 'started');
});
No comments:
Post a Comment