Featured image of post TypeScript(nodejs)のimport時の挙動

TypeScript(nodejs)のimport時の挙動

Twitter ツイート Hatena Bookmark ブックマーク

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畑から来た人間だったのでちょっと安心しました。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。