Node.js

So erfordern Sie absolute Pfade in Node.js

Über das Laden von Modulen mit absoluten Pfaden in Node.js. In Node.js können Sie Module und externe Dateien mit relativen Pfaden laden, aber Sie benötigen etwas Einfallsreichtum, um sie mit absoluten Pfaden zu laden.

Shou Arisaka
2 Min. Lesezeit
18. Nov. 2025

Über das Laden von Modulen mit absoluten Pfaden in Node.js. In Node.js können Sie Module und externe Dateien mit relativen Pfaden laden, aber Sie benötigen etwas Einfallsreichtum, um sie mit absoluten Pfaden zu laden.

Bis vor kurzem habe ich externe Module in einem Format wie dem folgenden angefordert. Es schien gut zu funktionieren. Jedoch.

var noderc = require( path.relative( __dirname , process.env.NODE_RC_FILE ) );

Tatsächlich ist der obige Code unvollständig und verursacht einen Fehler, wenn sich der Referenzpfad im selben Verzeichnis befindet.

module.js:550
    throw err;
    ^

Error: Cannot find module 'noderc.js'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/mnt/c/pg/node/tmp.js:10:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

Warum? Wenn sich ein Referenzpfad auf derselben Ebene befindet, gibt es einen Wert als Pfad wie noderc.js zurück, anstatt eines Pfades wie ./noderc.js.

Um es klar zu sagen, ist es so:

var noderc = require( "noderc.js" ); # => ERROR
var noderc = require( "../node/noderc.js" ); # => OK
var noderc = require( "./noderc.js" ); # => OK

Also habe ich das Folgende geschrieben. Wenn der Pfad so etwas wie “noderc.js” ist, konvertiert es ihn zu ”./noderc.js”.

global.require_absolute = function( filepath ){

    if ( ! /^\./.test( path.relative( __dirname , filepath ) ) ){
        global.noderc = require( `./${ path.relative( __dirname , filepath ) }` );
    } else {
        global.noderc = require( path.relative( __dirname , filepath ) );
    }

}

Und Verwendungsbeispiel:

require_absolute( "/mnt/c/pg/node/noderc.js" ) ;

require_absolute( process.env.NODE_RC_FILE ) ;

Es scheint eine tiefe Diskussion über Node.js require zu geben. Dieses Thema allein hat 2000 Sterne.

Better local require() paths for Node.js

Aktualisierung

Entschuldigung, ich habe mich geirrt. Das Folgende ist vielseitiger:

global.to_relative = function( filepath ){

    if ( ! /^\./.test( path.relative( __dirname , filepath ) ) ){
        return `./${ path.relative( __dirname , filepath ) }` ;
    } else {
        return path.relative( __dirname , filepath ) ;
    }

}

var noderc = require( to_relative( process.env.NODE_RC_FILE ) ) ;

Diesen Artikel teilen

Shou Arisaka 18. Nov. 2025

🔗 Links kopieren