Buscar ruta base absoluta del directorio del proyecto


Hasta ahora podíamos obtener la ruta absoluta de un archivo para abrir más tarde como ReadStream con este fragmento de código:

var base = path.resolve('.');
var file = base + '/data/test.csv';

fs.createReadStream(file)

Desde el Meteoro 0.6.5 la trayectoria de la base apunta a .meteor/local/build/programs/...

También está la API de activos, que no puede devolvernos una ruta sino solo el documento de lectura. ¿Pero necesitamos un flujo para procesar algunos archivos de datos más grandes?

Author: loomi, 2013-08-22

6 answers

Otra forma de encontrar el directorio raíz de tu proyecto ahora es esta:

var base = process.env.PWD

Tenga en cuenta que esto no es lo mismo que process.cwd(). En cambio, es el directorio donde ejecutó el comando meteor, que normalmente es lo que está buscando. Tenga en cuenta también que esto probablemente no será muy útil cuando ejecute su aplicación desde un paquete implementado.

 57
Author: Christian Fritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-02 21:51:31

Me encontré con la misma situación cuando actualizé a 0.6.5.

Lo que estoy haciendo actualmente es obtener el camino de esta manera:

var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );

Esto devuelve en modo dev :

/my/application/.meteor/local/build/programs

Y en modo liado :

/my/application/build/app/programs

Así que desde aquí estoy llegando a la ruta "raíz" de mi aplicación de la siguiente manera:

var application_root = Npm.require('fs').realpathSync( meteor_root + '/../' );

// if running on dev mode
if( Npm.require('path').basename( Npm.require('fs').realpathSync( meteor_root + '/../../../' ) ) == '.meteor' ){
    application_root =  Npm.require('fs').realpathSync( meteor_root + '/../../../../' );
}

El único caso en el que esto fallaría es si le das un nombre a la carpeta de tu aplicación ".meteoro " pero eso es un caso extremo.

Relativo a que usted puede acceder a cualquier otra cosa que necesite.

Además, también puede obtener acceso directo a la carpeta assets que crea el meteor bundler:

var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );

Es probable que esto sea temporal, ya que espero que se agreguen eventualmente mejores API de interacción de archivo/ruta..

Esperanza que ayuda

 16
Author: SuitedSloth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-26 06:29:36

Hey no necesitas codificar como las respuestas anteriores... echa un vistazo a Este paquete

Después de instalarlo, puede acceder a la ruta raíz de su meteoro solo con Meteor.rootPath

 6
Author: SsouLlesS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-18 17:41:44

Desde la versión 1.3, la función documentada

Assets.absoluteFilePath(assetPath)

Parece ser la mejor manera de obtener la ruta del proyecto de manera confiable.

Meteoro Github

 5
Author: loomi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-23 11:49:59

Para Meteoro 0.8.3,

__meteor_bootstrap__.serverDir da el directorio de trabajo, cuando se ejecuta en modo servidor.

Ejemplo

if (Meteor.isServer) {
   console.log(__meteor_bootstrap__.serverDir);
}
 4
Author: nshimiye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-12 23:57:58

A partir de Meteor 1.2.1, esto funciona para mí:

var absoluteBasePath = path.resolve('../../../../../.');

El mismo resultado usando split:

var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];

Usando process.cwd():

var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];
 1
Author: Konard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-22 21:25:41