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