はじめに
ECMAScript モジュールファイルが import された際に、そのファイルの上から下まで処理が走ることを確認してみました。
※ 動的インポートではなく、標準のインポート
以下の記事を参考に自分でも実践したみた記事になります(suin様に感謝)
import の仕様:
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import
ファイルの用意
ここに置きました。
https://github.com/nnashiki/esmodule-load-sandbox
$ tree
.
├── 1.mjs
├── 2.mjs
├── esm.mjs
└── main.mjs
esm.mjs
console.log("esm.js 1")
export const fnc_mjs = () => {return "this is fnc_mjs"}
import {fnc_1js} from "./1.mjs";
export {fnc_1js}
import {fnc_2js} from "./2.mjs";
export {fnc_2js}
console.log("esm.js 2")
main.mjs
console.log("main 1")
import {fnc_mjs, fnc_2js, fnc_1js} from "./esm.mjs";
console.log(fnc_mjs())
console.log(fnc_1js())
console.log(fnc_2js())
console.log("main 2")
1.mjs
console.log("1.js 1")
export const fnc_1js = () => {return "this is fnc_1js"}
console.log("1.js 2")
2.mjs
console.log("2.js 1")
export const fnc_2js = () => {return "this is fnc_2js"}
console.log("2.js 2")
実行結果
ECMAScript モジュールファイル は import された際に、そのファイルの上から下まで処理が走ることを確認できました。
$ node --version
v14.18.1
$ NODE_DEBUG=esm node main.mjs
ESM 18751: Storing file:///file_path/main.mjs in ModuleMap
ESM 18751: Translating StandardModule file:///file_path/main.mjs
ESM 18751: Storing file:///file_path/esm.mjs in ModuleMap
ESM 18751: Translating StandardModule file:///file_path/esm.mjs
ESM 18751: Storing file:///file_path/1.mjs in ModuleMap
ESM 18751: Storing file:///file_path/2.mjs in ModuleMap
ESM 18751: Translating StandardModule file:///file_path/1.mjs
ESM 18751: Translating StandardModule file:///file_path/2.mjs
1.js 1
1.js 2
2.js 1
2.js 2
esm.js 1
esm.js 2
main 1
this is fnc_mjs
this is fnc_1js
this is fnc_2js
main 2