代码之家  ›  专栏  ›  技术社区  ›  loomi

查找项目目录的绝对基本路径

  •  42
  • loomi  · 技术社区  · 12 年前

    到目前为止,我们可以通过以下代码片段获得稍后以readStream形式打开的文件的绝对路径:

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

    由于流星0.6.5,基本路径指向 .meteor/local/build/programs/...

    还有Assets API,它不能给我们返回路径,只能给我们读取的文档。我们只需要一个流来处理一些更大的数据文件?

    7 回复  |  直到 9 年前
        1
  •  72
  •   Christian Fritz    10 年前

    现在另一种查找项目根目录的方法是:

    var base = process.env.PWD
    

    请注意,这与 process.cwd() 。相反,它是您运行 meteor 命令,这通常是您要查找的内容。还要注意,当从部署的捆绑包中运行应用程序时,这可能不会有太大帮助。

        2
  •  17
  •   0x6A75616E    12 年前

    当我更新到0.6.5时,我也遇到了同样的困境。

    我目前正在做的是获得这样的路径:

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

    这会返回 开发模式 :

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

    在捆绑模式下 :

    /my/application/build/app/programs
    

    因此,从这里开始,我将进入应用程序的“根”路径,如下所示:

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

    唯一会失败的情况是,如果您碰巧将应用程序的文件夹命名为“.metal”,但这是一种边缘情况。

    相对于此,您可以访问任何其他需要访问的内容。

    此外,您还可以直接访问流星捆绑器创建的资产文件夹:

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

    这可能是暂时的,因为我预计最终会添加更好的文件/路径交互API。。

    希望能有所帮助

        3
  •  8
  •   loomi    9 年前

    自版本1.3以来 documented 作用

    Assets.absoluteFilePath(assetPath)

    似乎是可靠地获得项目路径的最佳方式。

    Meteor Github

        4
  •  6
  •   svelandiag    10 年前

    嘿,你不需要像上面的答案那样硬编码。。。看一看 This package

    安装后,您可以访问流星的根路径 Meteor.rootPath

        5
  •  4
  •   nshimiye    11 年前

    对于Meteor 0.8.3,

    __meteor_bootstrap__.serverDir 给出了在服务器模式下运行时的工作目录。

    实例

    if (Meteor.isServer) {
       console.log(__meteor_bootstrap__.serverDir);
    }
    
        6
  •  3
  •   Manoj Rana    6 年前

    您可以通过以下方式获取项目的基本根路径

    process.env.PWD
    
        7
  •  1
  •   Konard    10 年前

    从Meteor 1.2.1开始,这对我来说是有效的:

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

    使用相同的结果 split :

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

    使用 process.cwd() :

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