【发布时间】:2014-12-12 12:37:57
【问题描述】:
我知道get the current directory from a Meteor package,但是如何获取项目中特定文件的路径?
节点的 __dirname 和 __filename 在 Meteor 中不起作用。
【问题讨论】:
标签: javascript node.js meteor
我知道get the current directory from a Meteor package,但是如何获取项目中特定文件的路径?
节点的 __dirname 和 __filename 在 Meteor 中不起作用。
【问题讨论】:
标签: javascript node.js meteor
这很复杂。
meteor run 将您的项目文件复制到 <project-dir>/.meteor/local/build 内的目录树中,以不明显的方式重新组织它们(例如,原始树中的私有子目录成为 assets 子目录)并将其与各种 npm 模块来创建一个可以作为 nodejs 项目执行的包。实际上,为了避免重复,在 .meteor 目录中自动设置了一个 .gitignore 文件,告诉 git,如果您将其用于版本控制,不要复制 .meteor/local 目录。
会监视原始项目目录,以防您更改文件。然后将更改复制到当前项目构建目录并重新构建项目。
如果您部署到远程系统,构建将被复制到服务器然后运行。
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 库。
既然你提到了包,我注意到在构建中,服务器端的包代码最终会在:
~/<project-dir>/.meteor/local/build/programs/server/packages
和客户端:
~/<project-dir>/.meteor/local/build/programs/web.browser/packages
【讨论】: