find项目目录的绝对基path

到目前为止,我们可以获得文件的绝对path,以稍后作为readStream打开的代码片段:

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

由于meteor0.6.5的基本path指向.meteor/local/build/programs/...

还有Assets API,但是不能给我们一个path,只能读取文档。 我们需要一个stream来处理一些更大的数据文件?

现在find你的项目的根目录的另一种方法是这样的:

 var base = process.env.PWD 

请注意,这与process.cwd()不一样。 相反,它是你运行meteor命令的目录,这通常是你正在寻找的。 还请注意,从部署的捆绑包运行应用程序时,这可能不会很有帮助。

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

我现在正在做的是这样的path:

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

在dev模式下返回:

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

捆绑模式

 /my/application/build/app/programs 

所以从这里我得到我的应用程序的“根”path如下所示:

 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”,但这是一个边缘情况。

相对于你可以访问任何你需要的。

另外,您还可以直接访问meteor打包器创build的资产文件夹:

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

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

希望有所帮助

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

安装完成后,您可以通过Meteor.rootPath访问meteor的根path

自1.3版本以来, 文件化的function

Assets.absoluteFilePath(assetPath)

似乎是可靠地获得项目path的最佳途径。

meteorGithub

对于meteor0.8.3,

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

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

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