Parceljs / PostHTML - предотвращение переименования файлов.htm в.html

При построении через файлы.htm участков выводятся файлы.html. Я предпочитаю просто хранить файлы.htm в качестве выходных файлов, но не могу найти способ сделать это в Parcel или PostHTML, который используется в parcel.

Я обновил старый статический сайт, чтобы использовать Parcel в качестве инструмента для сборки. Все файлы сайта имеют расширение.htm.

У меня возникла проблема, когда в настоящее время посылка автоматически переименовывает все файлы.htm в.html, а также автоматически обновляет все внутренние ссылки на.html.

В настоящее время это проблема, потому что сайт индексируется поисковыми системами с суффиксами файла.htm, поэтому мне нужно либо сохранить две копии, либо выполнить перенаправления для каждого файла.htm.

1 ответ

Я не думаю, что это изначально поддерживается в parcel v2, но это можно сделать относительно легко с помощью настраиваемого плагина namer.

Вот код, который будет работать:

      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

Ваш главный package.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"
  },
}
Другие вопросы по тегам