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"
},
}