effel: Variabel in node ohne var,let ..

Hallo Alle

Zunächst bedanke ich bei Rolf. Es ist mir gelungen mit: delete require.cache[require.resolve('C:/Users/Administrator/Desktop/Konstruktion/K_1618 Programme/gschnitt/dr_konstruk2.js')] ein Modulaktualisierung herbei zu führen ohne node neu zu starten. Richtig gut.

Jetzt ein anderes komisches Ding: In meinem Module dr_konstruk2:

Nr 1

console.log("FF ",FF) das erzeugt Fehler FF is not defined Abbruch

console.log("typeof(FF) ",typeof(FF))

FF=true

console.log("FF ",FF)

Nr 2

//console.log("FF ",FF)

//console.log("typeof(FF) ",typeof(FF))

FF=true das erzeugt keinen Fehler !!?? Kein Abbruch

console.log("FF ",FF) bolean

FF ist initialisiert ohne var, let ...

Vielleicht gibt es dafür eine gute Erklärung

Effel

  1. Hallo effel,

    wie lädst Du dr_konstruk2.js? Per require('dr_konstruk2.js') oder per require("C:/foo/bar/baz/blub/zonk/dr_konstruk2.js")?

    Wenn Dir im require den Modulnamen genügt, dann sollte Dir require.resolve('dr_konstruk2.js') den vollständigen Pfad zum Modul liefern. Dafür ist es da, und es ist wenig sinnvoll, der resolve-Methode das, was sie eigentlich 'rausfinden soll, als Parameter zu übergeben. Find ich. In deinem Kontext mag es anders sein.

    Ich hätte noch Nr 3 im Angebot:

    "use strict";
    FF = true;
    // MÖÖP - Abbruch mit ReferenceError: FF is not defined
    console.log("FF ",FF); 
    

    In Nr. 2 hast Du "use strict" vermutlich nicht gesetzt, deshalb kann man durch Zuweisung an eine undeklarierte Variable diese als globale Variable erzeugen. Der strict-Mode verhindert das.

    Strict Mode im Selfwiki

    Um für deine Node-Application den strict-Mode zu erzwingen, hast Du 2 Möglichkeiten:

    • Zu Beginn jedes Moduls "use strict"; hinschreiben
    • In der package.json einen Eintrag "type": "module" hinzufügen, dann werden alle Module als ECMAScript-Module behandelt und die sind automagisch im strict mode.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. tatsächlich kein

      'use strict'; habe nachgetragen

      Require:

      reqire('./dr_konstruk2.js)

      löschen: delete require.cache[require.resolve('C:/Users/Administrator/Desktop/Konstruktion/K_1618/ Programme/gschnitt/dr_konstruk2.js')]

      eigentlich müßte auch:

      delete require.cache[require.resolve('./dr_konstruk2.js')]

      Probiere ich morgen aus

      Danke

      Effel