如何获取Meteor包中的文件path?
我知道如何从Meteor包中获取当前目录 ,但是如何获得项目中特定文件的path?
节点的__dirname
和__filename
在Meteor中不起作用。
这很复杂。
-
meteor run
将您的项目文件复制到<project-dir>/.meteor/local/build
目录中的一个目录树,以非明显的方式重新组织它们(例如,原始树中的私有子目录变成资产子目录)并混合用各种npm模块创build一个可以作为nodejs项目执行的bundle。 事实上,为了避免重复,在.meteor目录中自动设置一个.gitignore文件,告诉git,如果你使用它来进行版本控制,而不是复制.meteor / local目录。 -
如果您更改文件,则会监视原始项目目录。 然后将更改复制到当前的项目构build目录中并重build项目。
-
如果您部署到远程系统,构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