【问题标题】:Clarification on load ordering of Meteor files澄清 Meteor 文件的加载顺序
【发布时间】:2014-04-11 04:30:02
【问题描述】:

从文档以及我能找到的所有答案来看,meteor 文件似乎是按深度优先加载的,然后按字母顺序加载。我找不到任何详细说明,与相同深度的所有其他文件相比,相同深度的文件是否按字母顺序加载,在其文件夹中按字母顺序但优先考虑父文件夹的字母顺序,或其他一些变体。

假设我们有以下文件:

b/file0.js
b/d/file3.js
c/file2.js
c/a/file1.js

它们的加载顺序是什么?

对文档的一种解释是,顺序为 file1, file3, file0, file2(深度 2 的文件首先按字母顺序加载,然后是深度 1 的文件)

另一种可能性是file3, file0, file1, file2(b 目录中的文件在 c 子目录中的文件之前加载)。我猜不是这样,因为文档说最深的子目录中的文件首先加载。

最后,我还可以看到 file3, file1, file0, file2 发生(如果 b 中的文件深度相同,则它们会在 c 中的文件之前加载)

【问题讨论】:

    标签: meteor


    【解决方案1】:

    它们按以下顺序加载:file3, file1, file0, file2。所以你最后的猜测是对的。在客户端和服务器上都是如此。

    我做了一些其他的快速测试,没有深入研究代码,我敢打赌它首先按深度排序,然后按字母顺序按完整路径。

    为了执行测试,我刚刚创建了一个新项目并从您的问题中添加了文件结构。在每个文件中,我添加了一个带有文件名的 console.log

    【讨论】:

      【解决方案2】:

      讨厌的加载顺序函数在/tools/packages.js 中定义。逐步进行如下对比:

      • .html 文件在非 html 文件之前加载,
      • 名为 main.* 的文件在所有其他文件之后加载,
      • 在其路径中任何位置包含lib 的文件将在不包含lib 的文件之前加载,
      • 首先加载路径中包含更多段的文件,
      • 文件按字母顺序加载。

      列表中较高的规则优先于较低的规则,因此例如非主 .html 文件在非 html 主文件之前加载。在您的情况下,文件

      b/file0.js
      b/d/file3.js
      c/file2.js
      c/a/file1.js
      

      首先被分成具有相同路径段数的组:

      b/d/file3.js
      c/a/file1.js
      ---
      b/file0.js
      c/file2.js
      

      然后,在每个组中,整个路径按字母顺序排序。


      让我们来看一个更复杂的例子:

      x/lib/0.js
      a/index.html
      a/main.js
      a/f.js
      b/lib/echo.html
      b/lib/main.js
      k_2.js
      k.js
      c.js
      lib/widget.html
      d/e.js
      

      首先,将文件分成.html和非html组,html文件放在最前面:

      a/index.html
      b/lib/echo.html
      lib/widget.html
      ----------
      x/lib/0.js
      a/main.js
      a/f.js
      b/lib/main.js
      k_2.js
      k.js
      c.js
      d/e.js
      

      然后,在两个组中,将 main. 文件放在最后:

      a/index.html
      b/lib/echo.html
      lib/widget.html
      ----------
      x/lib/0.js
      a/f.js
      k_2.js
      k.js
      c.js
      d/e.js
      -----
      a/main.js
      b/lib/main.js
      

      现在,在每个创建的子组中,将路径中包含lib 的文件和不包含lib 的文件分开:

      b/lib/echo.html
      lib/widget.html
      -----
      a/index.html
      ----------
      x/lib/0.js
      -----
      a/f.js
      k_2.js
      k.js
      c.js
      d/e.js
      ----------
      b/lib/main.js
      -----
      a/main.js
      

      在您现在拥有的组中,根据路径段数创建子组。

      b/lib/echo.html
      -----
      lib/widget.html
      ----------
      a/index.html
      ----------
      x/lib/0.js
      ----------
      a/f.js
      d/e.js
      -----
      k_2.js
      k.js
      c.js
      ----------
      b/lib/main.js
      ----------
      a/main.js
      

      在这些最后的组中,按字母顺序对完整路径进行排序:

      b/lib/echo.html
      -----
      lib/widget.html
      ----------
      a/index.html
      ----------
      x/lib/0.js
      ----------
      a/f.js
      d/e.js
      -----
      c.js
      k.js
      k_2.js
      ----------
      b/lib/main.js
      ----------
      a/main.js
      

      希望这会有所帮助。

      【讨论】:

      • 不错的答案。感谢您添加这个休伯特!
      • 很好的例子。为什么文档没有提到 html 文件的优先级?
      • 也许这不是很重要,因为它们不包含您的 js 代码并且编译方式不同。
      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 2015-08-31
      • 2012-05-28
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多