vite-plugin-sourcemap-comment-redactor
v0.1.0
Published
Redact comments in sourcemap sourcesContent without changing source positions.
Downloads
25
Maintainers
Readme
vite-plugin-sourcemap-comment-redactor
English | Русский
Скрывает текст комментариев, сохранённых в source map, без изменения позиций исходного кода.
Плагин заменяет текст комментариев в sourcesContent пробелами той же длины. Маркеры комментариев и переводы строк остаются на своих местах, поэтому существующая таблица mappings продолжает соответствовать исходному коду.
// До
const answer = 42; // внутренняя заметка
// После обработки sourcesContent
const answer = 42; //Сгенерированный JavaScript, строковые литералы, регулярные выражения, пути к исходникам и mappings source map не изменяются.
Установка
npm install --save-dev vite-plugin-sourcemap-comment-redactorИспользование
import {defineConfig} from 'vite';
import sourcemapCommentRedactor from 'vite-plugin-sourcemap-comment-redactor';
export default defineConfig({
plugins: [
sourcemapCommentRedactor(),
],
build: {
sourcemap: true,
},
});Плагин поддерживает внешние, hidden, встроенные Base64, percent-encoded и indexed source maps. Он запускается только во время сборки.
Пример
Готовый Vite-проект находится в папке example:
cd example
npm install
npm run checkПример создаёт внешнюю source map и проверяет, что текст комментариев скрыт, а длина встроенного исходного кода не изменилась.
Настройки
sourcemapCommentRedactor({
fill: ' ',
preserveMarkers: true,
filter: sourcePath => !sourcePath.includes('/vendor/'),
report: true,
});| Настройка | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| fill | string | ' ' | Один UTF-16 code unit для замены текста комментария. Переводы строк никогда не заменяются. |
| preserveMarkers | boolean | true | Сохранять маркеры //, /* */, #! и <!-- -->. |
| filter | (sourcePath: string) => boolean | все исходники | Верните false, чтобы оставить исходник без изменений. |
| report | boolean | false | Выводить итог обработки после изменения source maps. |
Поддерживаемые исходники
- строчные, блочные и hashbang-комментарии в JavaScript, TypeScript, JSX и TSX;
- блочные CSS-комментарии и строчные комментарии Sass, SCSS, Less и Stylus;
- комментарии разметки HTML, XML, SVG, Vue, Svelte и Astro;
- комментарии внутри блоков
<script>и<style>; - комментарии JavaScript и TypeScript во frontmatter Astro.
Строковые литералы, текст шаблонных строк, регулярные выражения, JSX-текст, строки стилей и атрибуты разметки сохраняются без изменений.
Самостоятельный API
Функции обработки комментариев и source maps можно использовать без Vite:
import {redactSourceComments, redactSourceMap} from 'vite-plugin-sourcemap-comment-redactor';
const source = redactSourceComments('// private\nexport const answer = 42;', {
filename: 'answer.ts',
});
const result = redactSourceMap(sourceMapObject, {
filter: sourcePath => sourcePath.startsWith('src/'),
});
console.log(result);
// {comments: 1, sources: 1}redactSourceMap изменяет переданный объект source map на месте и возвращает количество изменений.
Почему замена, а не удаление?
Mappings source map указывают на исходные строки и UTF-16-колонки. Удаление символов комментария сдвинуло бы следующие позиции, поэтому встроенный исходник перестал бы соответствовать существующим mappings. Замена на пробелы той же длины сохраняет позиции.
Плагин сохраняет координаты source map, но не криптографический хеш содержимого. Любое изменение байтов .map изменяет вычисленный по ним хеш.
Примечания
- Плагин может обрабатывать только карты, содержащие
sourcesContent. - По умолчанию обрабатываются все встроенные исходники, включая зависимости из
node_modules. Используйтеfilter, чтобы исключить зависимости. build.rollupOptions.output.sourcemapExcludeSources: trueполностью удаляетsourcesContent, поэтому плагину нечего обрабатывать.- Комментарии в сгенерированном JavaScript не изменяются. Это относится и к юридическим уведомлениям из зависимостей.
- Source maps могут раскрывать не только комментарии. Не используйте этот плагин как сканер секретов.
