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

loo*_*omi 34 fs node.js meteor

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

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

fs.createReadStream(file)
Run Code Online (Sandbox Code Playgroud)

由于Meteor 0.6.5基本路径指向 .meteor/local/build/programs/...

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

Chr*_*itz 60

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

var base = process.env.PWD
Run Code Online (Sandbox Code Playgroud)

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

  • 它不是Node应用程序的根路径.只有目录路径,并取决于您执行此代码的位置. (4认同)

Sui*_*oth 16

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

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

var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );
Run Code Online (Sandbox Code Playgroud)

这将在开发模式下返回:

/my/application/.meteor/local/build/programs
Run Code Online (Sandbox Code Playgroud)

在捆绑模式:

/my/application/build/app/programs
Run Code Online (Sandbox Code Playgroud)

所以,从这里开始,我正在进入我的应用程序的"根"路径,如下所示:

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 + '/../../../../' );
}
Run Code Online (Sandbox Code Playgroud)

这种情况失败的唯一情况是,如果您碰巧将应用程序的文件夹命名为".meteor",那就是边缘情况.

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

此外,您还可以直接访问meteor bundler创建的assets文件夹:

var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );
Run Code Online (Sandbox Code Playgroud)

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

希望有所帮助


Sso*_*esS 6

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

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


loo*_*omi 6

从1.3版开始,记录的功能

Assets.absoluteFilePath(assetPath)

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

流星Github