Pergunta

Until now we could get the absolute path of a file to open later as readStream with this code snippet:

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

fs.createReadStream(file)

Since Meteor 0.6.5 the base path is pointing to .meteor/local/build/programs/...

There is also the Assets API, which but can not give us back a path but only the read document. We but need a stream to process some bigger data files?

Foi útil?

Solução

Another way to find your project's root directory now is this:

var base = process.env.PWD

Note that this is not the same as process.cwd(). Instead it is the directory where you ran the meteor command, which is typically what you are looking for. Note also that this probably won't be very helpful when running your app from a deployed bundle.

Outras dicas

I ran into the same predicament when I updated to 0.6.5.

What I'm currently doing is getting the path like this:

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

This returns on dev mode:

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

and on bundled mode:

/my/application/build/app/programs

So from here I'm getting to my application's "root" path like so:

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 + '/../../../../' );
}

The only case in which this would fail is if you happen to name your application's folder ".meteor" but that's an edge case.

Relative to that you can access whatever else you need to.

Additionally, you can also get direct access to to the assets folder that the meteor bundler creates:

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

This is likely to be temporary as I expect better file/path interaction APIs to be added eventually..

Hope that helps

Since version 1.3, the documented function

Assets.absoluteFilePath(assetPath)

seems to be the best way to get the project path reliably.

Meteor Github

Hey you do not need to hardcode like the above answers... take a look to This package

After install it you can access the root path of your meteor just wih Meteor.rootPath

For Meteor 0.8.3,

__meteor_bootstrap__.serverDir gives out the working directory, when run in server mode.

example

if (Meteor.isServer) {
   console.log(__meteor_bootstrap__.serverDir);
}

you could get project basic root path by

process.env.PWD

As of Meteor 1.2.1, this works for me:

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

The same result using split:

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

Using process.cwd():

var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top