Find absolute base path of the project directory

后端 未结 7 1468
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-04 21:35

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 + \'/d         


        
相关标签:
7条回答
  • 2020-12-04 22:05

    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.

    0 讨论(0)
  • 2020-12-04 22:08

    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];
    
    0 讨论(0)
  • 2020-12-04 22:09

    Since version 1.3, the documented function

    Assets.absoluteFilePath(assetPath)

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

    Meteor Github

    0 讨论(0)
  • 2020-12-04 22:09

    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

    0 讨论(0)
  • 2020-12-04 22:12

    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);
    }
    
    0 讨论(0)
  • 2020-12-04 22:17

    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

    0 讨论(0)
提交回复
热议问题