ESMとCJS
Node.jsのモジュールシステムには以下の2つがある
CommonJS: 以下CJS
ECMAScript modules: 以下ESM
CJSはこんなやつ
code:Node.js
const hoge = require('lib-name');
requireを使ってパッケージを読み込む。
ESMはフロントエンドJSでよく書くES6のモジュール読み込みの書き方
code:JavaScript
import hoge from 'lib-name';
Node.jsは歴史的経緯があり、現在はCJSとESMの共存時代となっている。
(つい最近、Node.jsでESMのexperimentalフラグが消えたらしい)
https://twitter.com/ponpoko04/status/1269280888904282113?s=20
既存のアプリケーションであれば、CJSで書かれていることが多く、そのままCJSで書くほうが無難っぽい。
(webpackやbabelがいい感じにトランスパイルしてくれると思うけど、検証が厳しい)
新規に作る場合はTypeScriptを最初から入れたり、snowpackやbackpackでトランスパイルする前提でESMで書けばいいと思う。
cf)
https://blog.hiroppy.me/entry/nodejs-esm
https://blog.hiroppy.me/entry/nodejs-experimental-modules
https://qiita.com/nanocloudx/items/f541c7ff95b10b40d189
https://github.com/nodejs/modules/blob/master/doc/archive/plan-for-new-modules-implementation.md
https://qiita.com/shimataro999/items/8a63ec06f33ccd2ea9ca