polidog lab

Top About Rss
2020年11月05日

TypeScript(nodejs)のimport時の挙動

TypeScript(nodejs)でのimportの挙動が気になったので調べてみた

疑問点

Importをしたときに、ファイルスコープの処理はimportするごとに実行されるのか?
それとも、初回のimport時のみ実行されるのか?

対象となるコードは以下の通り

// test1.ts

const hoge = 'abc'
console.log('test1')

export const fuga = () => {
  return hoge
}

このコードにおいて他の複数のファイルからimportされた場合 console.log('test1')は何回実行されるのか? という疑問です。

検証用コード

検証に使用したコードは以下のとおりです。

// exec1.ts
import { fuga } from './test1'
console.log('exec1')

export const execA = () => fuga()
// exec2.ts

import { fuga } from './test1'
console.log('exec2')

export const execB = () => fuga()
// index.ts

import { execA } from './exec1'
import { execB } from './exec2'

console.log('hello, world', execA(), execB())

実行結果

node dist/index.js
test1
exec1
exec2
hello, world abc abc

console.log('test1') が一度しか実行されてないない。
これはつまり、import時に実行されるファイルスコープの処理は1度しか実行されない。

最後に

よくイニシャライズ的な処理をファイルスコープに記述している例をみてて、どうなっているのか気になっていたが、一度しか実行されないことがわかったので安心です。
PHP畑から来た人間だったのでちょっと安心しました。

comments powered by Disqus