TypeScript(nodejs)でのimportの挙動が気になったので調べてみた
疑問点
Importをしたときに、ファイルスコープの処理はimportするごとに実行されるのか?
それとも、初回のimport時のみ実行されるのか?
対象となるコードは以下の通り
1
2
3
4
5
6
7
8
|
// test1.ts
const hoge = 'abc'
console.log('test1')
export const fuga = () => {
return hoge
}
|
このコードにおいて他の複数のファイルからimportされた場合 console.log('test1')
は何回実行されるのか?
という疑問です。
検証用コード
検証に使用したコードは以下のとおりです。
1
2
3
4
5
|
// exec1.ts
import { fuga } from './test1'
console.log('exec1')
export const execA = () => fuga()
|
1
2
3
4
5
6
|
// exec2.ts
import { fuga } from './test1'
console.log('exec2')
export const execB = () => fuga()
|
1
2
3
4
5
6
|
// index.ts
import { execA } from './exec1'
import { execB } from './exec2'
console.log('hello, world', execA(), execB())
|
実行結果
1
2
3
4
5
|
node dist/index.js
test1
exec1
exec2
hello, world abc abc
|
console.log('test1')
が一度しか実行されてないない。
これはつまり、import時に実行されるファイルスコープの処理は1度しか実行されない。
最後に
よくイニシャライズ的な処理をファイルスコープに記述している例をみてて、どうなっているのか気になっていたが、一度しか実行されないことがわかったので安心です。
PHP畑から来た人間だったのでちょっと安心しました。