Разработка электроники,
Систем автоматики,
Программного обеспечения
ООО "Антех ПСБ",
Санкт-Петербург
+79811865082
anteh@bk.ru
20.09.2021 Сайт https://anteh.ru
Нужно, чтобы после нажатия на сохранить в любом windows редакторе Sass/SCSS происходила автоматическая компиляция в локальный windows CSS файл, с последующей автоматической передачей CSS файла/файлов на удаленный *nix сервер. Компиляция .sass/.scss чрез dart sass, выгрузка на сервер через ssh.net. Листинг кода консольного приложения в конце статьи C# VS2019 .NET Framewort 4.0. Sass и SCSS могут использоваться как синонимы, это не верно, отличия по ссылке https://tpverstak.ru/sass-scss/ используйте синтаксис SCSS. Предлагаемое решение некая заготовка, из серии с чегобы начать. Описываемая в статье задача слегка упрощённая, в реальности нужно менять некоторые цифры в SCSS файле и видеть изменения сразу на нескольких экранах разных устройств с разным разрешением, ориентацией и пр., + иметь возможность использования своего прекомпилятора для SCSS файла и сопутствующие авто манипуляции с данными и файлами -но это не рассматривается. Вместо SCSS файлов или совместно с SCSS файлами можете компилировать и размещать что угодно и где угодно после самостоятельной доработки VS2019 консольного приложения.
Повторюсь, в статье речь о способе реализации "SCSS ленивчика", только авто компиляция + авто передача на сервер. Задача реализуется из того что есть в свободном/бесплатном доступе, или точнее того что удалось найти и выбрать в качесте оптимального решения. Если Вы работаете под Win, то для реализации достаточно .bat файлов + вспомогательные программы, если под *nix там много портов и скриптовых языков под любые задачи, но время на выбрать и настроить потребуется.
Всю предлагаемую информацию используете как есть, на своё усмотрение, никто за последствия использования предлагаемых решений ответственности не несет.
"SCSS ленивчик" пишется на .NET Framework 4.0 т.к. Renci Ssh.Net работает под .NET Framework 4.0, с .Net Core несовместим. Renci Ssh.Net под MIT лицензией. Библиотека Renci.SshNet.dll .NET Framework 4.0, для реализации загрузки файлов на удаленный сервер, бралась при компиляции в Release проекта VS2019 из https://github.com/sshnet/SSH.NET. Renci Ssh.Net поддерживает много фреймворков, на гитхабе описание есть, решение тех или иных проблем по использованию в сети есть.
Компиляция SCSS в CSS производится через Dart Sass Command-Line Interface по ссылке https://sass-lang.com/documentation/cli/dart-sass исчерпывающей документации достаточно. В dartsass: CSS файлы можно минифицировать, добавить map данные, обрабатывать сразу все SCSS файлы в директории, есть директива для автоматической компиляции SCSS в CSS после сохранения SCSS файла и пр. Всё работает, также проверен вариант Sass/SCSS компилятора на javascript. Лицензия MIT. Dart -язык программирования разработанный гуглом для замены или альтернативы javascript. Что такое Dart здесь https://surf.ru/pochemu-flutter-ispolzuet-dart-a-ne-kotlin-ili-javascript наиболее сжато и понятно.
"Ленивчик" разрабатывается в VS2019 под win консоль, также есть удалённый *nix веб сервер, на который upload.ятся CSS файлы. Соответственно у Вас должен быть SSH клиент, например PuTTY -free SSH and Telnet client и соответствующим образом настроенная SSH служба на серверной стороне. В частности для SSH на серверной стороне нужно настраивать способы аутентификации. Также нужно обратить внимание на антивирусные программы, по началу могут не дружить/запрещать сетевой доступ к серверу.
Первым делом аутентификация. Выясняем какие способы SSH аутентификации настроены на серверной стороне и обязательно проверяем какие из них работают на клиентской стороне посредством любого SSH клиента, например тот же PuTTY. При необходимости на серверной стороне производим дополнительную конфигурацию SSH. Какой способ аутентификации лучше/безопаснее в конкретном случае решайте сами. Повторимся, первым делом получите доступ к веб серверу любым существующим SSH клиентом, чтобы убедится в работоспособности выбранного Вами способа аутентификации.
Renci Ssh.Net поддерживает следующие виды аутентификации: NoneAuthenticationMethod -не использовался в проекте, KeyboardInteractiveAuthenticationMethod -ввод имени пользователя и пароля с клавиатуры, точнее автоматизированный ввод, PasswordAuthenticationMethod -по имени пользователя и паролю, PrivateKeyAuthenticationMethod -по закрытому ключу, точнее по файлу содержащему закрытый ключ в соответствующем формате. Соответственно на серверной стороне SSH должен быть настроен на тот или иной способ аутентификации, или на все сразу. Различные серверные SSH поддерживают гораздо большее количество способов аутоинтификации. Способы аутентификации задаются в массиве AuthenticationMethod[] am = new AuthenticationMethod[] { kauth, pauth, pkauth }; в фигурных скобках в приоритетном порядке указаны предварительно инициализированные способы аутентификации, первым ставим наиболее актуальный, желательно/удобней использовать один способ аутентификации. Пример кода ssh соединения с сервером:
|
Настройку ssh, openssh и пр. на серверной стороне описывать не будем. Для каждого сайта/клиента обычно создаётся свой пользователь. Если нужно работать сразу с несколькими сайтами/пользователями, соответственно дорабатываем решение.
С запуском компиляции .sсss фалйлов через консоль по коду всё обычно, согласно документации. Параметры к консольной программе или удобства для сторонних пользователей добавляем самостоятельно.
По работе программы. Указываем в SCSSFolder абсолютный полный путь к директории содержащей в том числе .scss файлы, вложенные директории не обрабатываются. После сохранения .scss файла в любом редакторе FileSystemWatcher реагирует на изменения и запускает компиляцию изменившегося .scss файла. Cкомпилированный в .css файл помещаются в CSSFolder, по дороге выполняется минификация, мап данные отключены -или можете скорректировать под себя. Далее FileSystemWatcher следящий за CSSFolder реагирует на изменения и загружает .css на сервер. При необходимости .css файлы можно объединить в один или несколько и по аналогии реализовать автоматические любые действия с любыми файлами, работать сразу с несколькими сайтами и всё что угодно
Код программной заготовки описываемой задачи:
|