41

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

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

fs.createReadStream(file)

从 Meteor 0.6.5 开始,基本路径指向.meteor/local/build/programs/...

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

4

7 回答 7

71

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

var base = process.env.PWD

请注意,这与process.cwd(). 相反,它是您运行meteor命令的目录,这通常是您要查找的目录。另请注意,从已部署的包运行您的应用程序时,这可能不会很有帮助。

于 2013-12-02T02:27:26.170 回答
17

当我更新到 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 + '/../../../../' );
}

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

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

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

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

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

希望有帮助

于 2013-09-26T06:29:36.523 回答
8

从 1.3 版开始,文档化功能

Assets.absoluteFilePath(assetPath)

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

流星 Github

于 2016-06-02T11:20:14.977 回答
6

嘿,你不需要像上面的答案那样硬编码......看看这个包

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

于 2015-09-18T17:41:44.007 回答
4

对于 Meteor 0.8.3,

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

例子

if (Meteor.isServer) {
   console.log(__meteor_bootstrap__.serverDir);
}
于 2014-08-12T23:57:58.247 回答
3

你可以通过

process.env.PWD
于 2020-01-24T05:52:37.150 回答
1

从 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];
于 2016-03-11T20:08:15.123 回答