我知道如何get the current directory from a Meteor package,但如何获取项目中特定文件的路径?
节点的__dirname
和__filename
在Meteor中不起作用。
答案 0 :(得分:5)
这很复杂。
meteor run
将项目文件复制到<project-dir>/.meteor/local/build
内的目录树中,以非显而易见的方式重新组织它们(例如,原始树中的私有子目录成为assets子目录)和将其与各种npm模块混合以创建可作为nodejs项目执行的包。实际上,为了避免重复,在.meteor目录中会自动设置一个.gitignore文件,告诉git,如果你用它进行版本控制,不要复制.meteor /本地目录。
如果您更改文件,则会监视原始项目目录。然后将更改复制到当前项目构建目录中并重建项目。
如果部署到远程系统,则构建将复制到服务器然后运行。
process
通常是定义的全局服务器端对象,并且根据node.js API工作,因为流星服务器代码最终在node.js中运行。
因此,您可以在服务器端运行console.log(process.cwd());
以获取服务器进程的当前工作目录,通常类似于:
~/<meteor project directory>/.meteor/local/build/programs/server
这表明当meteor run
在本地完成时,原始项目文件位于../../../../../
,但不会使用它,因为它可能在将来发生变化。
相反,对于包含原始项目文件的目录,您可以使用:
baseDir = process.cwd().replace(/\/\.meteor.*$/, '');
这将获取工作目录,并截断以/.meteor
但是,这不适用于服务器部署,因为服务器上不需要原始项目树,只需要构建。不打算作为客户端或服务器代码的文件可能会卡在私有子目录中,正如我所提到的那样,它成为构建中的资产子目录。当前在构建中查找文件的方法是在本地运行中手动检查.meteor / local,或者使用调用或模仿gnu find的JS库。
既然你提到了 packages ,我注意到在构建中,服务器端的包代码最终会出现在:
~/<project-dir>/.meteor/local/build/programs/server/packages
和客户方在:
~/<project-dir>/.meteor/local/build/programs/web.browser/packages