4

通过包裹 .htm 文件构建时,输出为 .html 文件。我宁愿将 .htm 文件保留为输出文件,但无法在 Parcel 或 Parcel 使用的 PostHTML 中找到一种方法。

我更新了一个旧的静态网站以使用 Parcel 作为构建工具。所有网站文件都带有 .htm 文件扩展名。

我遇到了一个问题,目前 parcel 自动将所有 .htm 文件重命名为 .html,并自动将所有内部链接更新为 .html

这是目前的一个问题,因为该站点在搜索引擎上以 .htm 文件后缀编入索引,因此我目前需要保留两个副本或为每个 .htm 文件执行重定向。

4

1 回答 1

0

我认为 parcel v2 不支持开箱即用,但可以使用自定义命名器插件相对轻松地完成

这是一些可以工作的代码:

import { Namer } from "@parcel/plugin";
import path from "path";

export default new Namer({
  name({ bundle }) {
    if (bundle.type === "html") {
      const filePath = bundle.getMainEntry()?.filePath;
      if (filePath) {
        let baseNameWithoutExtension = path.basename(filePath, path.extname(filePath));
        // See: https://parceljs.org/plugin-system/namer/#content-hashing
        if (!bundle.needsStableName) {
          baseNameWithoutExtension += "." + bundle.hashReference;
        }
        return `${baseNameWithoutExtension}.htm`;
      }
    }
    // Returning null means parcel will keep the name of non-html bundles the same.
    return null;
  },
});

在不发布单独包的情况下将此插件与 parcel 挂钩的最简单方法是使用yarn 的链接协议

您将像这样构建您的项目:

project
├── .parcelrc
├── package.json
├── src
│   └── index.html
└── parcel-namer-htm
    ├── package.json
    └── src
        └── HtmNamer.js <-- the code above

您的 mainpackage.json将链接到您的parcel-namer-htm文件夹,如下所示:

{
  "name": "my-project",
  "dependencies": {
    "parcel": "^2.0.0",
    "parcel-namer-htm": "link:./parcel-transformer-foo"
  }
}

您的.parcelrc文件将如下所示:

{
  "extends": "@parcel/config-default",
  "namers": ["parcel-namer-htm", "..."]
}

parcel-namer-htm/package.json看起来像这样:

{
  "name": "parcel-namer-htm",
  "main": "src/HtmNamer.js",
  "engines": {
    "node": ">= 12.0.0",
    "parcel": "^2.0.0"
  },
}
于 2021-10-20T21:29:32.323 回答