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.
Antworten
Zu viele Anzeigen?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.
-
Installieren Sie das Paket:
npm install sexy-require --save
-
einbeziehen.
require('sexy-require')
einmal oben in Ihrer Hauptanwendungsdatei.require('sexy-require'); const routers = require('/routers'); const api = require('$api'); ...
-
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
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 || '';
}
};
__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}`);
- See previous answers
- Weitere Antworten anzeigen