JavaScript에서 모듈은 한 번만 평가된다. 즉, 모듈이 처음으로 임포트될 때 그 모듈의 모든 코드가 실행되며, 그 결과가 캐시된다. 이후 동일한 모듈이 다시 임포트되더라도, 코드는 재실행되지 않고 초기에 캐시된 결과가 재사용된다.
모듈 임포트 시 실행:
모듈이 다른 파일에서 임포트될 때, 해당 모듈의 최상위 레벨 코드는 실행된다. 이 코드에는 함수, 클래스, 변수의 초기화가 포함될 수 있다. 이러한 실행은 모듈이 처음 임포트될 때 단 한 번만 발생한다.
export만 있고 import되지 않는 모듈:
모듈이 단지 export를 하고 다른 곳에서 명시적으로 임포트되지 않는 경우, 그 모듈의 코드는 실행되지 않는다. 모듈의 코드를 실행시키기 위해서는 어딘가에서 그 모듈을 임포트해야 한다.
Import 시점의 실행:
모듈이 임포트되는 순간, 해당 모듈의 코드가 실행되며, export된 객체들이 메모리에 로드된다. 이 후, 해당 모듈을 임포트한 모든 파일에서 export된 객체들을 사용할 수 있다.
예시:
index.ts 파일이 프로그램의 진입점일 때, index.ts에서 다양한 모듈을 임포트하면, 그 모듈들의 코드는 index.ts가 실행될 때 실행된다. 예를 들어, index.ts에서 다음과 같이 모듈을 임포트하는 경우:
// index.ts
import './setup'; // setup 모듈에서 코드가 실행됨
import { functionFromModuleA } from './moduleA'; // moduleA의 코드가 실행됨
functionFromModuleA();
여기서 setup 모듈과 moduleA의 코드는 index.ts가 로드되는 시점에 실행된다. setup은 명시적으로 아무것도 import하지 않아도 그 내부의 코드가 실행되며, moduleA는 필요한 함수나 변수를 export한다.
결론: 모듈은 임포트된 시점에 실행되며, 해당 모듈의 모든 최상위 코드가 처리된다. export만 있고 실제로 임포트되지 않은 모듈의 코드는 실행되지 않는다.