503 Stimmen

Ermitteln des Projektstamms aus einer laufenden node.js-Anwendung

Gibt es einen anderen Weg, außer process.cwd() , um den Pfadnamen des Root-Verzeichnisses des aktuellen Projekts zu erhalten. Implementiert Node so etwas wie die Eigenschaft von Ruby, Rails.root ,. Ich bin auf der Suche nach etwas, das konstant und zuverlässig ist.

0voto

sultan Punkte 4387

Mach es sexy.


const users = require('../../../database/users'); //  what you have
// OR
const users = require('$db/users'); //  no matter how deep you are
const products = require('/database/products'); //  alias or pathing from root directory

Drei einfache Schritte, um das Problem des hässlichen Pfades zu lösen.

  1. Installieren Sie das Paket: npm install sexy-require --save

  2. einbeziehen. require('sexy-require') einmal oben in Ihrer Hauptanwendungsdatei.

    require('sexy-require');
    const routers = require('/routers');
    const api = require('$api');
    ...
  3. Optionaler Schritt. Die Pfadkonfiguration kann definiert werden in .paths Datei im Root-Verzeichnis Ihres Projekts.

    $db = /server/database
    $api-v1 = /server/api/legacy
    $api-v2 = /server/api/v2

0voto

Codebeat Punkte 6303

Alte Frage, ich weiß, aber keine Frage zur Verwendung progress.argv . Das argv-Array enthält einen vollständigen Pfad- und Dateinamen (mit oder ohne .js-Erweiterung), der als Parameter für die Ausführung durch node verwendet wurde. Da dies auch Flags enthalten kann, müssen Sie dies filtern.

Dies ist kein Beispiel, das Sie direkt verwenden können (weil ich meinen eigenen Rahmen verwende), aber ich denke, es gibt Ihnen eine Vorstellung davon, wie man es macht. Ich verwende auch eine Cache-Methode, um zu vermeiden, dass der Aufruf dieser Funktion das System zu sehr belastet, vor allem, wenn keine Erweiterung angegeben ist (und eine Dateiprüfung erforderlich ist), zum Beispiel:

node myfile

o

node myfile.js

Das ist der Grund, warum ich ihn zwischenspeichere, siehe auch den Code unten.


function getRootFilePath()
{
        if( !isDefined( oData.SU_ROOT_FILE_PATH ) )
        {
            var sExt = false;

            each( process.argv, function( i, v )
            {
                 // Skip invalid and provided command line options
                if( !!v && isValidString( v ) && v[0] !== '-' )
                {
                    sExt = getFileExt( v );

                    if( ( sExt === 'js' ) || ( sExt === '' && fileExists( v+'.js' )) )
                    {

                        var a = uniformPath( v ).split("/"); 

                         // Chop off last string, filename
                        a[a.length-1]='';

                         // Cache it so we don't have to do it again.
                        oData.SU_ROOT_FILE_PATH=a.join("/"); 

                         // Found, skip loop
                        return true;
                    }
                }
            }, true ); // <-- true is: each in reverse order
        }

        return oData.SU_ROOT_FILE_PATH || '';
    }
};

-1voto

The-x Laws Punkte 141

Versuchen Sie path._makeLong('some_filename_on_root.js');

Beispiel:

cons path = require('path');
console.log(path._makeLong('some_filename_on_root.js');

Das gibt den vollständigen Pfad vom Root Ihrer Node-Anwendung zurück (dieselbe Position wie in package.json)

-1voto

aligatorr89 Punkte 51

Verwenden Sie einfach:

 path.resolve("./") ... output is your project root directory

-5voto

Andrew Koster Punkte 1269

__dirname gibt Ihnen das Root-Verzeichnis, solange Sie sich in einer Datei befinden, die im Root-Verzeichnis liegt.

// ProjectDirectory.js (this file is in the project's root directory because you are putting it there).
module.exports = {

    root() {
        return __dirname;
    }
}

In einer anderen Datei:

const ProjectDirectory = require('path/to/ProjectDirectory');
console.log(`Project root directory is ${ProjectDirectory.root}`);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X