Find absolute base path of the project directory

有些话、适合烂在心里 提交于 2019-11-26 19:28:31

问题


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?


回答1:


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.




回答2:


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




回答3:


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




回答4:


Since version 1.3, the documented function

Assets.absoluteFilePath(assetPath)

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

Meteor Github




回答5:


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);
}



回答6:


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];


来源:https://stackoverflow.com/questions/18378809/find-absolute-base-path-of-the-project-directory

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!