LoginSignup
1
1

More than 1 year has passed since last update.

ECMAScript モジュールファイルが import された際に、そのファイルの上から下まで処理が走ることを確認

Posted at

はじめに

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1