Meteor 项目中 /public/assets/ 的奇怪案例

Jam*_*ton 6 build hierarchy meteor

在我的 Meteor 1.10.2 项目中,我在文件夹assets内创建了一个文件/public/夹。构建 Meteor 应用程序时,我发现此assets文件夹已复制到这些位置,作为这些web.browser...文件夹的直接子级:

/.meteor/local/build/programs/web.browser/assets/
/.meteor/local/build/programs/web.browser.legacy/assets
Run Code Online (Sandbox Code Playgroud)

但是,如果我将文件夹重命名为Assets(或给它任何其他名称),则在构建应用程序时,我会在app文件夹内部更深处找到它:

/.meteor/local/build/programs/web.browser/app/Assets/
/.meteor/local/build/programs/web.browser.legacy/app/Assets/
Run Code Online (Sandbox Code Playgroud)

这背后的逻辑是什么?意图是什么?处理文件夹的最佳做法是/public/assets/什么?在用作文件夹内/public/文件夹的名称时,是否还有其他词被给予特殊处理?

ghy*_*ybs 1

FWIW,这种行为具体是由于流星工具捆绑程序造成的:

https://github.com/meteor/meteor/blob/release/METEOR%401.10.2/tools/isobuild/bundler.js#L719-L725

  setTargetPathFromRelPath(relPath) {
    // XXX hack
    if (relPath.match(/^(packages|assets|dynamic)\//)) {
      this.targetPath = relPath;
    } else {
      this.targetPath = files.pathJoin('app', relPath);
    }
Run Code Online (Sandbox Code Playgroud)

因此我们可以看到有 3 个特殊的目录名表现出这种特殊的行为:

  • 资产
  • 动态的

公共资产示例:

公共资产

这些资产捆绑在构建中:

在构建中复制的资产

对于“包”,虽然我们可以理解这就是 Meteor 运送包的静态资源的方式(即当它们调用 时api.addAssets(),我们也可以看到存在潜在的冲突,在(尽管不太可能)情况下,我们使用像这样的路径名“公共/包/我的包名称”。

至于“资产”,最初的名称是“静态”,但我认为它也没有被公开记录。

对于“动态”,我还不知道它的确切目的是什么,但我们可以看到它将其内容作为“javascript”类型(至少是 SVG 文件)提供服务,而前 2 个将其内容作为“文本/纯文本”提供。

动态中的 SVG 文件充当 JavaScript