【问题标题】:How do I obtain the path of a file in a Meteor package?如何获取 Meteor 包中文件的路径?
【发布时间】:2014-12-12 12:37:57
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js meteor


    【解决方案1】:

    这很复杂。

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

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2016-03-11
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多