如何获取Meteor包中的文件path?

我知道如何从Meteor包中获取当前目录 ,但是如何获得项目中特定文件的path?

节点的__dirname__filename在Meteor中不起作用。

这很复杂。

  1. meteor run将您的项目文件复制到<project-dir>/.meteor/local/build目录中的一个目录树,以非明显的方式重新组织它们(例如,原始树中的私有子目录变成资产子目录)并混合用各种npm模块创build一个可以作为nodejs项目执行的bundle。 事实上,为了避免重复,在.meteor目录中自动设置一个.gitignore文件,告诉git,如果你使用它来进行版本控制,而不是复制.meteor / local目录。

  2. 如果您更改文件,则会监视原始项目目录。 然后将更改复制到当前的项目构build目录中并重build项目。

  3. 如果您部署到远程系统,构build将被复制到服务器,然后运行。

process通常是一个已定义的全局服务器端对象,并且根据node.js API工作,因为meteor服务器代码最终在node.js中运行。

所以你可以运行console.log(process.cwd()); 在你的服务器端获取服务器进程的当前工作目录,通常是这样的:

 ~/<meteor project directory>/.meteor/local/build/programs/server 

这表明当meteor run在本地完成时,原始项目文件在../../../../../ ,但不要使用它,因为它可能会在将来改变。

相反,对于包含原始项目文件的目录,可以使用:

 baseDir = process.cwd().replace(/\/\.meteor.*$/, ''); 

这将得到工作目录,并截断以/.meteor开头的所有/.meteor

但是,这对服务器部署不起作用,因为服务器上不需要原始项目树,只需要构build。 不打算成为客户端或服务器代码的文件可能会卡在私有子目录中,正如我所提到的那样,成为构build中的资产子目录。 目前在构build中查找文件的方法是在本地运行中手动检查.meteor / local,或者使用调用或模仿gnu find的JS库。

既然你提到了 ,我注意到在构build中,服务器端的包代码最终在:

 ~/<project-dir>/.meteor/local/build/programs/server/packages 

和客户端:

 ~/<project-dir>/.meteor/local/build/programs/web.browser/packages