typescript - Node.js - Importera endast funktion, kör inte hela filen
Jag märkte precis något och skulle vilja förstå varför nod beter sig på det här sättet.
Jag har 2 filer som så:
src/api/index-api.ts src/worker/index-worker.ts
De har båda en enkel console.log('Started xxx')
Det jag märkte var att när jag körde node build/api/index-api.js - ser jag både Started API och Started Worker i konsolen.
Jag klurade ut att i src/api/index-api.ts finns ett import-uttalande för att använda en funktion från src/api/index-worker.ts:
import { getContentFunction } from '../worker';
Så jag kan förstå varför de båda blir kallade.
Men hur fungerar detta egentligen - jag menar vad händer exakt och varför är det så? Så vitt jag visste importerar jag bara en specifik funktion.
Tack.
Svar #1
Jag antar att ditt console.log-anrop finns i roten av din src/worker/index-worker.ts-fil.
När du importerar en funktion körs även alla deklarationer inom målfilens globala namnrymd eftersom de till exempel också kan instansiera variabler. Att importera en enskild funktion förhindrar inte det, det innebär bara att du vill behålla en referens endast till den angivna funktionen och inte till alla. Det gör det också möjligt att importera nämnda funktion till din globala namnrymd istället för att behöva använda worker.getContentFunction till exempel.
TL;DR: din arbetsfil körs fortfarande helt, ditt importval bestämmer bara vilka referenser du behåller.
Anteckning om CommonJS: module.exports={...}-satsen i slutet av filen anger vad filen exporterar, vilket körs som vilken annan kod som helst i den. Om en importerad fil inte kördes helt, skulle en sådan sats definitivt vara värdelös i sig själv. Tolken måste veta vad som finns i filen så att den kan göra vad du bad den göra.
Svar #2
Om jag förstår rätt. Du vill anropa den andra filen från den första filen. Försök:
Första filen :
const {} = require("./second_file.js")
Andra filen :
console.log("Second file is working")
