Онлайн конвертер CSS в SCSS
Инструменты для украшения и уменьшения
Украшатель CSS
Украшает, форматирует и сделает CSS код более читаемым.Уменьшитель CSS
Сделает CSS код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Украшатель HTML
Украшает, форматирует и сделает HTML код более читаемым.Уменьшитель HTML
Сделает HTML код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Украшатель Javascript
Украшает, форматирует и сделает Javascript код более читаемым.Уменьшитель Javascript
Сделает Javascript код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Обфускатор Javascript
Сделает Javascript код более сложным для понимания или чтения для защиты.Украшатель JSON
Украшает, форматирует и сделает JSON код более читаемым.Уменьшитель JSON
Сделает JSON код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Украшатель XML
Украшает, форматирует и сделает XML код более читаемым.Уменьшитель XML
Сделает XML код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Украшатель OPML
Украшает, форматирует и сделает OPML код более читаемым.Уменьшитель OPML
Сделает OPML код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Украшатель SQL
Украшает, форматирует и сделает SQL код более читаемым.Уменьшитель SQL
Сделает SQL код уменьшенным, сжатым путем удаления новых строк, пробелов, комментариев и отступов.Конвертеры
Конвертер CSV в JSON
Конвертирует CSV данные в JSON и украшает.Конвертер CSV в TSV
Конвертирует CSV данные в TSV и украшает.Конвертер CSV в Excel
Конвертирует CSV данные в Excel и украшает.Конвертер CSV в HTML
Конвертирует CSV данные в HTML, просматривая его ниже.Конвертер CSV в SQL
Конвертирует CSV в SQL формат и украшает.Конвертер CSV в Многострочные данные
Конвертирует CSV в многострочные данные и делает его более читаемым.Конвертер CSV в Текст
Конвертирует CSV в обычный текст и делает его более читаемым.Конвертер CSV в XML/JSON
Конвертирует CSV в XML и JSON онлайн.Конвертер CSV в XML
Конвертирует CSV в XML и украшает.Конвертер CSV в YAML
Конвертирует CSV в YAML и украшает.Извлечь столбец CSV
Извлекает один столбец из CSV.Конвертер Excel в CSV
Конвертирует Excel в CSV и украшает.Конвертер Excel в TSV
Конвертирует Excel в TSV и украшает.Конвертер Excel в HTML
Конвертирует Excel в HTML и украшает.Excel в формульный вид
Конвертирует Excel в формульный вид и украшает.Конвертер Excel в SQL
Конвертирует Excel в SQL и украшает.Конвертер Excel в JSON
Конвертирует Excel в JSON и украшает.Конвертер Excel в XML
Конвертирует Excel в XML и украшает.Конвертер Excel в YAML
Конвертирует Excel в YAML и украшает.Конвертер Excel в Текст
Конвертирует Excel в Текст и украшает.Извлечь столбец Excel
Извлекает один столбец из Excel.Конвертер TSV в JSON
Конвертирует данные TSV в JSON и украшает.Конвертер TSV в CSV
Конвертирует данные TSV в CSV и украшает.Конвертер TSV в Excel
Конвертирует данные TSV в Excel и украшает.Конвертер TSV в HTML
Конвертирует данные TSV в HTML, с просмотром ниже.Конвертер TSV в SQL
Конвертирует TSV в SQL формат и украшает.Конвертер TSV в Многострочные данные
Конвертирует TSV в многострочные данные и делает более читаемым.Конвертер TSV в Текст
Конвертирует TSV в обычный текст и делает более читаемым.Конвертер TSV в XML/JSON
Конвертирует TSV в XML/JSON и украшает.Конвертер TSV в XML
Конвертирует TSV в XML и украшает.Конвертер TSV в YAML
Конвертирует TSV в YAML и украшает.Извлечь столбец TSV
Извлекает один столбец из TSV.Конвертер HTML в CSV
Конвертирует HTML в CSV и украшает.Конвертер HTML в EXCEL
Конвертирует HTML в EXCEL и украшает.Конвертер HTML в TSV
Конвертирует HTML в TSV и украшает.Конвертер HTML в Многострочные данные
Конвертирует HTML в Многострочные данные и украшает.Конвертер HTML в JSON
Конвертирует HTML в JSON и украшает.Конвертер HTML в XML
Конвертирует HTML в XML и украшает.Конвертер HTML в YAML
Конвертирует HTML в TAML и украшает.Конвертер HTML в SQL
Конвертирует HTML в SQL и украшает.Конвертер HTML в PHP
Конвертирует HTML в PHP и украшает.Конвертер HTML в Javascript
Конвертирует HTML в Javascript и украшает.Конвертер HTML в Asp
Конвертирует HTML в Asp и украшает.Конвертер HTML в JSP
Конвертирует HTML в JSP и украшает.Конвертер HTML в Perl
Конвертирует HTML в Perl и украшает.Конвертер HTML в Jade
Конвертирует HTML в Jade и украшает.Конвертер HTML в Текст
Конвертирует HTML в обычный текст.Конвертер Jade в HTML
Конвертирует Jade в HTML и украшает.Конвертер Markdown в HTML
Конвертирует Markdown в HTML код.Конвертер JSON в XML
Конвертирует JSON в XML и украшает.Конвертер JSON в CSV
Конвертирует JSON в CSV и украшает.Конвертер JSON в Excel
Конвертирует JSON в Excel и украшает.Конвертер JSON в TSV
Конвертирует JSON to TSV и украшает.Конвертер JSON в YAML
Конвертирует JSON в YAML и украшает.Конвертер JSON в HTML
Конвертирует JSON в HTML и украшает.Конвертер JSON в SQL
Конвертирует JSON в SQL и украшает.Конвертер JSON в C# класс
Конвертирует JSON в C# класс и украшает.Конвертер JSON в Текст
Конвертирует JSON в Текст и украшает.Конвертер SQL в HTML
Конвертирует SQL в HTML и украшает.Конвертер SQL в CSV
Конвертирует SQL в CSV и украшает.Конвертер SQL в Excel
Конвертирует SQL в Excel и украшает.Конвертер SQL в TSV
Конвертирует SQL в TSV и украшает.Конвертер SQL в XML
Конвертирует SQL в XML и украшает.Конвертер SQL в JSON
Конвертирует SQL в JSON и украшает.Конвертер SQL в YAML
Конвертирует SQL в YAML и украшает.Конвертер SQL в Text
Конвертирует SQL в Text и украшает.Конвертер XML в JSON
Конвертирует XML в JSON и украшает.Конвертер XML в CSV
Конвертирует XML в CSV и украшает.Конвертер XML в Excel
Конвертирует XML в Excel и украшает.Конвертер XML в TSV
Конвертирует XML в TSV и украшает.Конвертер XML в YAML
Конвертирует XML в YAML и украшает.Конвертер XML в HTML
Конвертирует XML в HTML и украшает.Конвертер XML в SQL
Конвертирует XML в SQL и украшает.Конвертер XML в Текст
Конвертирует XML в Текст и украшает.Конвертер YAML в XML/JSON/CSV
Конвертирует YAML в JSON/CSV/XML и украшает.Конвертер YAML в Excel
Конвертирует YAML в Excel и украшает.Конвертер YAML в HTML
Конвертирует YAML в HTML и украшает.Конвертер XML в PDF
Конвертировать XML в PDF и Скачать.Конвертер CSV в PDF
Конвертировать CSV в PDF и Скачать.Конвертер TSV в PDF
Конвертировать TSV в PDF и Скачать.Конвертер EXCEL в PDF
Конвертировать EXCEL в PDF и Скачать.Конвертер JSON в PDF
Конвертировать JSON в PDF и Скачать.Конвертер YAML в PDF
Конвертировать YAML в PDF и Скачать.Конвертер SQL в PDF
Конвертировать SQL в PDF и Скачать.Конвертер Текст в PDF
Конвертировать Текст в PDF и Скачать.Конвертер PDF в JPG
Конвертировать PDF в JPG и Скачать.Конвертер PDF в PNG
Конвертирует PDF в PNG и украшает.Конвертер Текст в HTML
Конвертирует Текст в HTML и украшает.Конвертер RSS в JSON
Конвертирует RSS в JSON и украшает.Конвертер OPML в JSON
Конвертирует OPML в JSON и украшает.Инструменты проверки валидности кода
Валидатор CSS
Проверьте ваш исходник CSS.Валидатор Javascript
Проверьте ваш исходник Javascript.Тестер Javascript
Проверьте ваш Javascript код.Тестер HTML
Проверьте ваш HTML код.Валидатор JSON
Проверьте ваш JSON код и украсьте.Валидатор XML
Проверьте ваш XML код и украсьте.Валидатор YAML
Проверьте ваш YAML код и украсьте.Валидатор UUID
Проверьте ваш UUID код.Тестер XPath
Онлайн Xpath тестер.Тестер и генератор регулярных выражений
Проверка регулярного выражения и создание кода.Препроцессоры CSS
Компилятор LESS
Создает отформатированные стили CSS из меньшего источника.Компилятор Stylus
Создает украшенные стили CSS из StylusКонвертер CSS в LESS
Конвертирует CSS в Less и украшает.Конвертер CSS в SCSS
Конвертирует CSS в SCSS и украшает.Конвертер CSS в SASS
Конвертирует CSS в SASS и украшает.Другие утилиты
Генераторы
- Генератор случайных паролей
- Генератор Favicon
- Безопасный каталог htaccess
- Генератор htpasswd
- Генератор Lorem Ipsum
- Генератор адресов IPv4
- Генератор адресов IPv6
- Генератор MAC адресов
- Генератор календарных дат
Конвертеры величин
- Конвертер веса
- Конвертер площади
- Конвертер плотности и массы
- Конвертер байтов/битов
- Конвертер электроэнергии
- Конвертер энергии
- Конвертер силы
- Конвертер Топлива
- Конвертер длины
- Конвертер объема и емкости
- Конвертер температуры
- Конвертер скорости и ускорения
- Конвертер угла
- Конвертер массы
- Конвертер мощности
- Конвертер давления и напряжения
- Конвертер времени
- Астрономический конвертер
- Конвертер частоты
Утилиты
- Информация о браузере
- Конвертер Base64 в Изображение
- Конвертер Изображение в Base64
- Конвертер Файла в Base64
- Генератор символов
- Конвертер текста в HTML объекты
- Парсер URL
- Автообновление страницы
Экранирование и разэкранирование
- Экранирование и разэкранирование JSON
- Экранирование и разэкранирование C#
- Экранирование и разэкранирование Javascript
- Экранирование и разэкранирование Java
- Экранирование и разэкранирование CSV
- Экранирование и разэкранирование SQL
- Экранирование и разэкранирование HTML
- Экранирование и разэкранирование XML
Шифрование
- Генератор HMAC
- Хэш калькулятор
- Стеганография изображений
- Стеганографический декодер
- Генератор паролей MySQL/MariaDB
- Генератор паролей Postgres
Строчные утилиты
- Конвертер базового номера
- Кодер/Декодер Base64
- Средство просмотра различий
- Кодировщик Url
- Декодер Url
- Кодировщик Html
- Декодер Html
- Добавить слэш
- Убрать слеш
- Конвертер числа в слово
- Утилиты строк
- Трансформер текста
- Конвертер регистра
- Калькулятор даты
- Конвертер Даты/Времени в временную метку Unix
- Конвертер временную метку Unix в время Дата/Время
- Конвертер Секунд в человеческое время
- Конвертер Секунд в Часы:Минуты:Секунды
Конверторы изображений
- Конвертер JPG в PNG
- Конвертер PNG в JPG
- Конвертер GIF в PNG
- Конвертер PNG в GIF
- Конвертер BMP в PNG
- Конвертер BMP в JPG
- Генератор изображений с закругленными углами
Инструменты домена и IP
- Получить IP и имя хоста
- Просмотр имени хоста
- Whois сервис
- Просмотр DNS
- Просмотр MX
- Просмотр сервера имён
- Проверка IP сайта
- IP утилиты
- Мой IP адрес
Редакторы кода
- Просмотр исходного кода
- Онлайн Редактор Кода
- Пример кода
Конвертеры цвета
- Конвертер RGB в HEX
- Конвертер RGB в CMYK
- Конвертер RGB в HSV
- Конвертер HEX в HSV
- Конвертер HEX в CMYK
- Конвертер HSV в CMYK
Онлайн-конвертер CSS to POT | Conholdate Apps
Онлайн-конвертер CSS to POT | Conholdate Apps- Products
- conversion App
- CSS to POT conversion
Powered by conholdate. com and conholdate.cloud
Нажмите или перетащите файлы сюда
Нажимая кнопку загрузки или загружая документ, вы соглашаетесь с нашей Политикой конфиденциальности и Условия использования
Загрузить документ
Loading…
Обработка, пожалуйста, подождите…
Конвертировать
Копировать текст
Скачать
Копировать ссылку
Ваше мнение важно для нас, пожалуйста, оцените это приложение.
★ ★ ★ ★ ★
Спасибо за оценку нашего приложения!
CSS to POT conversion
Conholdate CSS to POT Conversion — это кроссплатформенное и кроссбраузерное приложение для конвертации, которое позволяет конвертировать CSS to POT в любом современном браузере (Chrome, Safari, Firefox, Opera, Tor и т. д.) и на любой ОС (Windows, Unix и MacOS), независимо от характеристик вашего ПК. Преобразованный CSS to POT сохранит исходную структуру, содержимое и стили документа. CSS to POT Приложение для конвертирования построено на основе высококачественного механизма преобразования документов, который обеспечивает выдающиеся результаты преобразования и производительность. Наша цель — предложить нашим пользователям безопасные и наилучшие возможности преобразования. Приложение Conholdate.Conversion предлагает функцию OCR, которая позволяет анализировать файлы изображений и экспортировать данные в документы Excel, например преобразовывать PNG в Excel.
Как Конвертировать CSS to POT
- Щелкните внутри области перетаскивания или перетащите файл.
- Подождите, пока файл CSS to POT не будет загружен.
- Выберите выходной формат из выпадающего меню.
- Нажмите кнопку Конвертировать, чтобы начать преобразование CSS to POT.
- Скачайте или поделитесь полученным файлом.
Часто задаваемые вопросы
Q: Как преобразовать файл CSS to POT?
A: Загрузите файл, перетащив его в зону загрузки или щелкните по нему, чтобы выбрать файл с помощью проводника. После этого выберите конечный формат, в который вы хотите преобразовать файл, и нажмите кнопку Преобразовать.
Q: Могу ли я извлечь таблицы из изображений (PNG) и экспортировать их в файлы Excel?
A: Да, это возможно. Преобразование Conholdate изображения в Excel будет анализировать файлы изображений с помощью функции OCR и извлекать текст и данные таблиц. Извлеченные данные можно сохранить в различных форматах, таких как Excel, OpenOffice и других.
Q: Сколько файлов можно конвертировать одновременно?
A: Вы можете конвертировать по 1 файлу за раз.
Q: Каков максимально допустимый размер файла?
A: Максимально допустимый размер файла для загрузки и конвертации составляет 20 МБ.
Q: Как получить результаты конвертирования файла?
A: В конце процесса преобразования вы получите ссылку для скачивания. Вы можете скачать результаты сразу или отправить ссылку на вашу электронную почту.
Q: Как многостраничный документ преобразуется в изображение?
A: Каждая страница такого документа будет сохранена как отдельное изображение. После завершения конвертации вы получите набор таких изображений.
Еще приложения
Conholdate
annotation
Conholdate
assembly
Conholdate
barcode
Conholdate
qrcode
Conholdate
conversion
Conholdate
editor
Conholdate
locker
Conholdate
metadata
Conholdate
merger
Conholdate
parser
Conholdate
search
Conholdate
signature
Conholdate
splitter
Conholdate
translation
Conholdate
viewer
Conholdate
unlocker
Еще conversion приложения
- eBook conversion
- Email conversion
- Excel conversion
- Image conversion
- Microsoft-Project conversion
- PowerPoint conversion
- Word conversion
- OpenOffice conversion
- Visio conversion
- Text conversion
- Web conversion
- Photoshop conversion
- Cad conversion
- OpenPCL conversion
- OneNote conversion
- Contact conversion
- LaTeX conversion
- Code conversion
- WordPerfect conversion
- Video conversion
- Archive conversion
Как преобразовать каталог SASS/SCSS в CSS через командную строку?
спросил
Изменено 1 год, 9 месяцев назад
Просмотрено 92к раз
Я пробовал:
sass-convert --from scss --to css --recursive app/assets/stylesheets temp
Но это только преобразует css в SASS, а я хочу наоборот.
Затем я посмотрел на команду sass, но не похоже, что я могу передать ей каталог.
4
Чтобы выполнить однократную компиляцию Sass вместо watch
, вы можете сделать это из командной строки:
sass --update scss:css
Чтобы Sass импортировал один файл (обычно частичный, с _
, начинающимся с имени файла), вы можете сделать это внутри файла Sass:
@import "_base.scss";
Таким образом, Sass знает , где вы хотите, чтобы произошло включение.
По умолчанию Sass не может импортировать весь каталог. Однако жемчужина Sass Globbing может. Вы можете установить его из командной строки:
gem install sass-globbing
А потом смотреть с ним:
sass -r sass-globbing --watch sass_dir:css_dir
Обратите внимание, что подстановка будет импортировать файлы в алфавитном порядке, поэтому убедитесь, что ваш CSS будет правильно каскадировать, если это произойдет.
1
Используйте команду sass
, за которой следует имя входного файла и путь
, двоеточие (:
) и желаемое имя выходного файла и путь
. Если выходной файл еще не существует, Sass сгенерирует его. Например,
sass sass/main.scss:css/main.css
Однако это одноразовая команда, которую необходимо запускать каждый раз, когда вы хотите создать новый файл CSS. Более простой и удобный способ — использовать встроенный в Sass --наблюдать за флагом
. Это отслеживает изменения в вашем файле Sass и автоматически запускает команду компиляции каждый раз, когда вы сохраняете изменения.
sass --watch sass/main.scss:css/main.css
Если у вас есть несколько файлов Sass в каталоге, вы можете отслеживать изменения в любом файле в этом каталоге:
sass --watch sass:css
В Sass также доступны четыре стиля вывода CSS: вложенный
, расширенный
, компактный
и сжатый
. Их можно использовать следующим образом:
sass --watch sass:css --style сжатый
Дополнительные сведения см. в документации Sass.
, просто перейдите в каталог проекта и сделайте следующее:
sass --update sass-dir:assets/css
с sass-dir каталог, содержащий ваши фактические файлы sass и assets/css желаемый выходной каталог.
Надеюсь, это поможет.
Вы можете использовать компас
для преобразования файлов Sass в CSS.
Чтобы инициализировать config.rb
, попробуйте:
compass init --syntax=sass --css-dir=css --javascripts-dir=js
Получив файл конфигурации, попробуйте:
скомпас компаса
или явно указав файл: compass compile sass/foo.scss
.
Чтобы установить его, попробуйте:
sudo gem update sudo gem установить компас sass
4
https://sass-lang. com/guide
вы можете использовать
sass --watch [путь к входной папке]:[путь к выходной папке]
я попытался запустить его в новом терминале, и после этого sass наблюдает за папкой и компилирует любые изменения.
вы можете использовать этот код
sass --watch file.sass:file.css
или
sass --watch folderSass:foldercss
this.main если вы хотите создать css код
sass --watch sass:css --стиль сжат
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Как мы полностью перешли на CSS-модули с помощью codemods и Sourcegraph Code Insights
Наш журнал изменений, объявления, сообщения разработчиков и все остальное, что, по нашему мнению, может вас заинтересовать.
Весной 2021 года команда Sourcegraph пересмотрела систему дизайна и пользовательский интерфейс нашего веб-приложения. Это был амбициозный проект, потому что, наряду с улучшением UX, мы стремились сделать веб-интерфейсы более согласованными, что требовало сотрудничества большинства продуктовых команд. Задача также была сложной с технической точки зрения, поскольку стили приложения были реализованы с использованием глобальных правил CSS с использованием Bootstrap в качестве основы. Наши компоненты пользовательского интерфейса обычно оформлялись тремя разными способами:
- Использование комбинации служебных классов Bootstrap.
- Использование пользовательского класса, специфичного для элемента.
- Использование глобальных стилей, унаследованных от глобальной области.
Было сложно изменить отдельные компоненты пользовательского интерфейса, потому что инженерам нужно было учитывать всю таблицу стилей, чтобы избежать конфликтов стилей в глобальной области видимости:
- При добавлении нового имени класса в таблицу стилей инженерам нужно было убедиться, что нет других компонентов использовал его. Методология БЭМ очень помогла в этом, но время от времени мы все равно сталкивались с проблемами. Эти проблемы было невероятно сложно отладить, поскольку глобальные стили можно использовать по-разному.
- Глобальные правила CSS зависят от порядка кода, и трудно обеспечить сохранение порядка при реализации глобальных изменений, таких как редизайн приложения. Перемещение файлов может привести к немного другому порядку импорта, который немного повлияет на пользовательский интерфейс. Отладка таких небольших изменений может значительно замедлить работу команды и превратить DX в кошмар.
- Не было надежного и настроенного способа определения неиспользуемого кода CSS, не связанного с какими-либо элементами HTML. В процессе редизайна мы время от времени обнаруживали такие стили. Эти стили не добавили ценности ни нашей кодовой базе, ни нашему продукту.
Чтобы решить эти проблемы, мы решили, что перед тем, как погрузиться в редизайн, мы должны найти способ использовать стили с ограниченной областью вместо добавления новых стилей в глобальную область. В то же время нам нужно было обеспечить эффективную интеграцию этого решения с текущим подходом. Успех определяется комбинацией следующих результатов:
- Модульный CSS применяется для новых компонентов системы дизайна.
- Он хорошо работает с существующими глобальными стилями и элементами пользовательского интерфейса.
- У нас есть четкий путь миграции, который не мешает разработке функций.
Решение CSS Modules
Мы исследовали популярные решения, доступные в среде с открытым исходным кодом: компромиссы между CSS в JS, обычным CSS и гибридными решениями. Некоторые из них предлагали более мощные функции, но мы решили использовать решение, которое, как мы знали, можно легко внедрить — модули CSS.
Что такое CSS-модули?
Модули CSS великолепны, потому что они помогают вам писать многократно используемые компоненты с изолированными стилями. Согласно репозиторию, модулей CSS:
«Файлы CSS, в которых все имена классов и имена анимаций по умолчанию ограничены локально».
С модулями CSS на классы CSS следует ссылаться в файле JavaScript посредством явной привязки к файлу стилей:
импортировать стили из './styles.css' const Title = () =>Заголовок!
Компилятор обновит файл CSS на этапе сборки, заменив класс селектора CSS, указанный в разметке, уникальным набором символов. И файл JavaScript будет обновлен путем замены класса CSS новой встроенной строкой. Окончательная HTML-разметка может выглядеть так:
Заголовок!
Этот подход предназначен для решения проблемы глобальной области видимости в CSS. Инженеры могут с радостью называть свои селекторы CSS как угодно, не беспокоясь о непредвиденных последствиях в других областях кода. Создание модуля CSS очень похоже на создание обычного файла CSS. Поддержание этого потока гарантировало, что мы можем легко начать применять этот подход, не слишком мешая нашему опыту разработчиков. После того как мы обновили документацию по использованию модулей CSS, команды сразу же приняли этот подход для новых функций.
Проблемы с отслеживанием миграции
Команда Frontend Platform начала миграцию с ручного преобразования глобальных стилей в модули CSS для одной недавно разработанной функции. Мы быстро заметили, что, несмотря на некоторый первоначальный прогресс, у нас есть несколько вопросов, которые замедляют работу:
- Как мы можем узнать, постоянно ли модули CSS используются для добавления новых функций в проект?
- Каков наш текущий прогресс? Какой процент глобальных стилей уже преобразован в модули CSS?
- Учитывая текущую скорость изменений, сколько времени потребуется для переноса всех оставшихся стилей в модули CSS?
Мы знали, что можем вручную искать в кодовой базе соответствующие файлы и делать выводы на основе этого, или мы могли написать скрипт, который сделает это за нас. Но идеальное решение давало бы четкую, краткую информацию о том, где мы находимся в данный момент, и его было бы легко поддерживать. К счастью, другая команда разработчиков Sourcegraph разработала точное решение нашей проблемы!
«Code Insights раскрывает высокоуровневую информацию о вашей кодовой базе, основываясь как на том, как ваш код меняется с течением времени, так и на его текущем состоянии». — источник.
Code Insights вступила в бета-версию в августе 2021 года, и мы с радостью начали использовать ее для отслеживания хода миграции. На сегодняшний день Code Insights общедоступна.
Количество файлов CSS, которые являются глобальными, по сравнению с файлами модулей.Мы использовали несколько простых поисковых запросов для создания анализа кода и сразу же получили ответы на все вопросы, важные для отслеживания миграции, в одной картинке. Это был важный инструмент для информирования инженерной организации о том, где мы находимся в процессе миграции. Code Insights может быть особенно полезен для таких команд, как наша, которые выполняют много невидимой работы и не могут обосновать необходимость посвящать время таким инициативам, как решение проблемы технического долга. Возможность визуально сообщать о прогрессе заинтересованным сторонам за пределами инженерного отдела или руководителям действительно убедительна. Команды, которые обычно управляют большими частями кодовой базы, могут столкнуться с трудностями в понимании того, что происходит, и Code Insights делает это очень легко.
Миграция, над которой мы начали работать, не имела жестких сроков, поэтому было легко отвлечься на новые блестящие инициативы. Кроме того, несколько модулей было немного сложнее переписать, и мы подсознательно откладывали их рефакторинг. Эти факторы способствовали замедлению, но понимание кода в виде карты запланированной работы с четким назначением мотивировало довести миграцию до 100% завершения. Это постоянно напоминало нам, что мы близки к нашей цели, и помогло нам закрыть эту главу без каких-либо остатков работы.
Проблемы с выполнением миграции
Глобальные миграции являются сложной задачей для групп платформы. Потратив время на миграцию еще одной функции в CSS-модули, мы обнаружили на своем пути некоторые препятствия для выполнения:
- Работа по миграции довольно повторяющаяся, и нам пришлось сделать ее тонну, потому что размер кодовой базы довольно значителен: ~ 400 файлов для переноса.
- Мы хотели сделать миграцию как можно более плавной для групп разработчиков. Попросить их выделить значительную часть своего времени для работы над миграцией было вариантом, но не идеальным.
- Не очень интересно работать в течение длительного периода времени, но затягивание миграции означало бы, что кодовая база останется несогласованной на слишком долгое время. Новые инженеры могут запутаться в том, какой подход использовать, даже если мы задокументируем его.
Codemods в помощь
Codemod — это автоматизированное изменение исходного кода, которое помогает командам, занимающимся платформой, выполнять глобальный рефакторинг быстрее и с большей уверенностью. Поскольку кодмоды обычно пишутся на том же языке, что и проект, они могут понять его тонкости и сложности. Это делает их идеальными для выполнения крупномасштабной миграции, когда функций поиска и замены недостаточно. Кодмод обычно включает в себя следующие шаги:
- Создание абстрактного синтаксического дерева (AST) из исходного файла.
- Обход AST в поисках узлов для преобразования.
- Внесите необходимые изменения в AST.
- Регенерируйте исходный файл на основе нового AST.
С технической стороны: большинство изменений, необходимых для миграции модулей CSS, являются механическими и могут быть автоматизированы с помощью информации, доступной в абстрактных синтаксических деревьях CSS и Typescript. Но самое главное, подход codemod позволяет нам преодолеть все проблемы, с которыми мы столкнулись, работая над миграцией вручную:
- ⚡️Вместо того, чтобы тратить время на бездумное повторение переноса глобальных стилей в модули CSS, мы прилагаем усилия для создания надежного скрипта, который сделает это за нас. Это гораздо более увлекательная задача, потому что она дает команде знания и опыт, которые можно использовать для будущих миграций.
- 🥷 Возможность автоматического переноса 95% вариантов использования значительно сокращает необходимые временные затраты и позволяет команде разработчиков выполнять рефакторинг за кулисами, не обращаясь за помощью к специалистам по продукту.
- 🏎 Более быстрая миграция означает, что кодовая база остается несогласованной в течение гораздо меньшего времени.
Реализация Codemod
Для программного переноса глобальных стилей в модули CSS сценарий codemod выполняет три основных действия:
1. Находит пары файлов для преобразования.
Найти файл компонента React с соответствующим файлом глобальных стилей в кодовой базе Sourcegraph несложно, поскольку компоненты React имеют совмещенные стили с предсказуемым именем файла. Например, стили для Button.tsx
определены в Button.scss
в той же папке.
2. Преобразование файла глобальных стилей в модуль CSS.
Это многошаговая операция:
- Во-первых, избавьтесь от БЭМ-нотации, используемой для селекторов CSS, и удалите лишнюю вложенность, необходимую для обеспечения уникальности селектора.
.insights-панель { гибкий: нет; &__обертка { дисплей: гибкий; } }
. insights-панель { гибкий: нет; } .обертка { дисплей: гибкий; }
- Для этого мы использовали PostCSS — инструмент для преобразования стилей с помощью JS-плагинов. Полученный скрипт похож на вложенный плагин postcss с некоторыми изменениями для удаления нотации БЭМ.
- Сохраните список классов модуля CSS в памяти для дальнейшего использования в компоненте React. Это делается с помощью служебных функций, предоставляемых пакетом css-modules-loader-core. Они дают нам список классов, доступных в модуле CSS, которые мы можем сопоставить с глобальными классами CSS, которые мы только что преобразовали. Для нашего игрушечного примера это будет выглядеть так:
const classMapping = { 'информационная панель': 'аналитическая панель', 'insights-dashboard__wrapper': 'обертка', }
- В качестве последнего штриха добавьте
.module.scss
к имени файла, необходимому для того, чтобы инструменты сборки интерпретировали этот файл как модуль CSS.
3. Замените ссылки на глобальные классы в компоненте React, используя список классов модулей CSS, сохраненный с предыдущего шага.
Для управления Typescript AST мы использовали ts-morph — оболочку TypeScript Compiler API для статического анализа и программного изменения кода. Опираясь на API этого пакета, скрипт codemod перебирает все строковые литералы в AST компонента React и ищет глобальные классы, обработанные на предыдущем шаге.
Вот AST, сгенерированный для нашего небольшого примера. Исследуйте его самостоятельно с помощью AST Explorer.
Codemod заменяет каждое соответствие строкового литерала ссылкой на соответствующий класс модуля CSS.
На этом преобразование завершено, и скрипт выводит информацию о классах CSS, не используемых в компоненте React. Это позволило нам удалить мертвый код в процессе миграции.
Сценарий codemod можно использовать как инструмент командной строки, указав список файлов для преобразования:
$ yarn transform --transform . /globalCssToCssModule.ts ./sourcegraph/**/*.tsx
Первые результаты codemod
В конце сентября 2021 года мы разработали codemod для проверки концепции миграции в отдельном репо и потратили пару дней на его применение к кодовой базе. Инсайты по коду, созданные для отслеживания миграции, легко показали всплеск прогресса миграции, которым мы с радостью поделились с другими командами в Slack:
Сотрудничество с подрядчиками
Еще одна проблема, с которой мы столкнулись, заключалась в том, что мы продолжали нарушать собственные правила: во многих местах мы обнаружили, что используем стили, не относящиеся к соответствующему компоненту. Обработка этих случаев требовала ручного вмешательства инженеров после применения codemod.
Чтобы продолжить выполнять миграцию за кулисами, мы начали работать с подрядчиками, чтобы помочь нам справиться со случаями, которые кодмод не мог решить. Это был еще один рычаг повышения производительности, похожий на codemod, который очень помог нам сосредоточиться на критических проблемах, сохраняя при этом процесс миграции в фоновом режиме.
Ничто не сравнится с использованием @sourcegraph для создания @sourcegraph — мы переходим с глобального CSS на CSS-модули, а наша группа по работе с внешним интерфейсом использует Code Insights для отслеживания хода миграции: pic.twitter.com/1lRqYjLiwz
— Beyang Liu (@ beyang) 31 октября 2021 г.
Обзор результатов
Мы успешно перешли на CSS-модули за кулисами, достигнув поставленной перед нашей командой цели «беспроблемного взаимодействия с разработчиком»:
Мы полагаемся на ту же комбинацию кода Инсайты и кодмоды в нашем последующем значительном переходе от глобальных классов Bootstrap к нашей новой системе дизайна Wildcard. Мы считаем, что этот подход — это нечто большее, чем просто автоматизация некоторых простых задач и ускорение разработки, поскольку он помогает инженерам быть довольными за счет сокращения ручного труда при обновлении зависимостей их проектов, рефакторинге устаревших шаблонов или исправлении ошибок, если следующая версия общедоступной версии API имеет критические изменения.