如何获取Meteor包中文件的路径?

时间:2014-12-12 02:14:37

标签: javascript node.js meteor

我知道如何get the current directory from a Meteor package,但如何获取项目中特定文件的路径?

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

1 个答案:

答案 0 :(得分:5)

这很复杂。

  1. meteor run将项目文件复制到<project-dir>/.meteor/local/build内的目录树中,以非显而易见的方式重新组织它们(例如,原始树中的私有子目录成为assets子目录)和将其与各种npm模块混合以创建可作为nodejs项目执行的包。实际上,为了避免重复,在.meteor目录中会自动设置一个.gitignore文件,告诉git,如果你用它进行版本控制,不要复制.meteor /本地目录。

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

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

  4. 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