Строим простую среду разработки

Node.JS + NVM

Для работы нам понадобится среда выполнения Node.js и менеджер версий nwp (опционально)

Node или Node.js — программная платформа, основанная на движке V8, превращающая JavaScript из узкоспециализированного языка в язык общего назначения.

Node Version Manager, чаще называемый nvm, является наиболее популярным средством установки нескольких версий Node.js

NodeJS потребуется для установки пакетов, модулей и зависимостей проекта, а NVM — для установки, удаления и переключения версий NodeJS. Переключение потребуется вам при работе с проектами, которые написаны под более новую или старую версию NodeJS.

Визуализация работы NVM
Визуализация работы NVM

Основные команды NVM

Список установленных версий

nvm ls

Список доступных версий

nvm list available

Установка последней версии

nvm install latest

Установка версии из списка доступных

nvm install <version>

Переключиться на другую версию

nvm use <version>

По желанию вы можете попробовать другие менеджеры версий.

nvs (Node Version Switcher) — это кроссплатформенный вариант nvm с возможностью интеграции с VS Code.

Volta — это новый диспетчер версий, созданный командой LinkedIn. Заявлено, что он отличается увеличенной скоростью и межплатформенной поддержкой.

Структура файлов и каталогов

Для начала давайте ознакомимся с имеющееся структурой каталогов.
Была разработана достаточно продуманная структура файлов и каталогов. Она позволяет удобно взаимодействовать нескольким программам.

Псевдографическое дерево структуры

├───portfolio
└───projects
    ├───in-process
    │   ├───builds
    │   │   └───aigen31.github.io
    │   ├───sources   
    │   └───tasks
    └───ready

Описание каждого из каталогов

/portfolio (опционально) — сохранение превью для портфолио, далее они идут на публикацию на freelance-площадку.

/projects/in-proggress — проекты, находящиеся в процессе разработки или вероятнее всего будут дорабатываться.

/projects/ready — разработанные проекты.

/projects/builds — папка с собранными сборщиком проектами, которые синхронизируются с удалённым хостингом проектов (в моём случаю GitHub).

/projects/sources — проекты с исходным кодом, над которыми происходит работа.

/projects/tasks — задачи автоматизации Powershell.

Gulp для решения рутинных задач

Визуализация работы Gulp.js
Визуализация работы Gulp.js

О моей сборке

Для моих проектов и этой статьи была подготовлена сборка Gulp, вдохновлённая сборкой другого разработчика WebDesign Master. Она была доработана под общие нужды и избавлена от некоторого лишнего кода, который уже был неактуальным с новыми версиями некоторых модулей.
Её полный разбор будет в другой статье.

Основные функции сборщика

  1. Минифицирует CSS, JS и сжимает изображения.

  2. Конвертирует шрифты в разные форматы.

  3. Встраивает HTML код из одного HTML файла в другой.

Запуск проекта

  1. Загрузите проект из Git, распакуйте архив и пройдите до корневого каталога.

  2. В корневом каталоге зайдите в контекстное меню (через ПКМ) с зажатым Shift > "Открыть с помощью Powershell".

Контекстное меню
Контекстное меню
  1. Введите команду для разрешения исполнения неподписанных скриптов

    set-executionpolicy remotesigned

  2. Установите Gulp глобально (ключ -g)

    npm i gulp -g

  3. Инициализируете проект, вводя ваши данные

    npm init

  4. Установите зависимости для проекта

    npm i

  5. Запустите проект, используя команду

    gulp

После этого начнётся запуск задач по умолчанию, в том числе запуск локального сервера BrowserSync, который мониторит изменения HTML/CSS/JS файлов и шрифтов с изображениями.

Сохранение актуальности Gulp

Чтобы данная сборка оставалась актуальной долгое время, пакеты с модулями нужно своевременно обновлять и при необходимости переписывать опции модулей в gulpfile.js.

Для этого нам нужно глобально установить пакет npm-check-updates.

npm-check-updates обновляет в package.json ваши зависимости, игнорируя указанные версии

Основные команды

Проверка версий пакетов

ncu

Обновление версий в packaje.json

ncu -u

После данных команд выполняем установку пакетов

npm i

Работа с Git

Git — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день его поддерживает Джунио Хамано.

Визуализация системы управления версиями. Источник:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1
Визуализация системы управления версиями. Источник:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1

Установка Git рекомендуется всем разработчикам, т. к. приходится работать не только с вашими, начатыми с нуля проектами, но и чужими, где уже имеется готовый код.

Для установки рекомендуются базовые знания английского или переводчик, так вы можете поменять настройки под себя и отключить лишние функции. К примеру я убираю пункт с установкой Git Bash.

Git Bash — это командная строка, с помощью которой пользователи могут использовать функции Git. Он эмулирует среду bash в Windows и позволяет пользователю использовать большинство стандартных команд Unix.

Загружаем и устанавливаем Git.

Основные команды

Инициализация проекта

git init

Добавление файлов в репозиторий

git add <file_name> или точка "." (для добавления всех файлов)

Создание коммита с комментарием (ключ -m)

git commit -m "comment"

Обновить удалённую ссылку со связанными объектами. Проще говоря — синхронизировать ваш локальный Git с удалённым (к примеру GitHub)

git push -u origin master (может быть main, если вы поставили данную опцию в Git)

Создание новой ветви и переход к ней (ключ -b)

git checkout -b

Переход к другой ветви

git checkout

Слияние с веткой (вы должны находиться в ветке, в которую будут включаться изменения)

git merge

Это команды, которые помогут вам работать с простыми проектами и манипулировать ветками.

Автоматизация с Powershell

PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев.

Push в Git при мониторинге изменений

Был разработан один из базовых сценариев Powershell, который позволяет избавиться от постоянной монотонной синхронизации с удалённым хостингом Git. Он находится в папке task и мониторит папку /builds/aigen31.github.io

Он работает на основе объекта FileSystemWatcher, который мониторит изменения в указанном каталоге и вызывает по порядку команды

git status
git add .
git commit -m 'update'
git push -u origin master

Считается, что для простых проектов не стоит описывать каждый коммит, т. к. вероятнее всего, над его вёрсткой занимаетесь только вы. В ином случае стоит отказаться от данной автоматизации и писать коммиты осмыслено

Вы можете дописывать сценарии автоматизации по своему желанию, их расположение идеально подходит для манипуляции с проектами. Можете написать в комментариях, что хотели бы предложить

Репозиторий в Git

Для того, чтобы сохранять ваши работы удалённо, рекомендую использовать GitHub в качестве хоста.


Если репозиторий является веб-страницей, то её можно будет подключить к GitHub Pages и использовать в качестве хостинга статичных сайтов.

Бесплатная синхронизация с OneDrive

Сервис OneDrive от Microsoft позволяет синхронизировать рабочие папки (рабочий стол, документы, изображения) с облаком. Для сохранности своих данных рекомендуется синхронизировать в крайнем случае рабочий стол и документы, т. к. изображения на практике могут иметь большой вес, а в бесплатном тарифе OneDrive можно хранить лишь 5гб.

Для увеличения объёма хранилища до 1тб. придётся покупать пакет Office 365 (2300 и более руб./год). Это составляет около 200 руб./месяц

Другие облачные хранилища

Если сравнить Office 365 с Яндекс 360, то при оплате второго сервиса за месяц цена будет равной. Но при полной оплате за год стоимость будет сильно отличаться — 1399 руб./год В Яндекс.Диске так же имеется возможность синхронизации рабочих папок, но она отсутствует в бесплатном тарифе.

Рекомендую для начала опробовать OneDrive для синхронизации, цена не очень разная.

В облаке для безопасности я советую хранить закодированный файл-ключ менеджера паролей KeePassXC (без него мы не сможем войти в базу), о котором будет рассказано в следующем разделе.

Локальный менеджер паролей KeePassXC

KeePassXC - бесплатный менеджер паролей с открытым исходным кодом. Все началось с сообщества KeePassX. Он построен с использованием библиотек Qt5, что делает его мультиплатформенным приложением, которое можно запускать в Linux, Windows и macOS

Хранение паролей в KeePassXC и похожих менеджерах имеет ряд плюсов:

  1. Можно добавлять пароли из таблицы CSV и любых других мест (игровые аккаунты, различные браузеры и сервисы).

  2. Защита с помощью закодированного файла и пароля, который имеется только у вас. Его стоит хранить в нескольких местах, чтобы точно не потерять. Иначе вы утеряете доступ к базе данных.

  3. Сортировка по группам.

  4. Существуют онлайн менеджеры паролей и зачастую они платные. Этот менеджер хранит всё локально и он бесплатный. От подобных онлайн платформ смысл появляется тогда, когда нужно открыть /общий доступ к паролям, в нашем случае такое не требуется.

Подключение по FTP и SSH посредством встроенных функций Windows 10

FTP

Если вам не нужны все возможности различных FTP-клиентов, то вы можете спокойно подключаться к серверу через проводник с помощью этих действий:

  1. Зайдите в контекстное меню

  2. Выберете пункт "Добавить новый элемент в сетевое окружение"

  3. Следуете инструкциям

SSH через OpenSSH от Microsoft

OpenSSH — это средство подключения для удаленного входа, использующее протокол SSH

Проверьте наличие OpenSSH через "Параметры" > "Приложения" > "Приложения и возможности" > "Дополнительные компоненты". Вероятнее всего, он уже будет установлен, как это было у меня, в ином случае установите клиент через пункт "Добавить компонент".

OpenSSH в "Параметрах"
OpenSSH в "Параметрах"

Подключение происходит с помощью следующей команды в терминале
ssh username@servername

Заключение

Мы поверхностно разобрались в среде разработки для работы с HTML/CSS/JS: установили NodeJS и менеджером версий, немного изучили автоматизацию работы с помощью Gulp и Powershell (более подробный разбор будет в другой статье), узнали про применение Git для гибкого изменения проектов и их хранения на удалённом хостинге. После этой статьи некоторые разделы будут разветвляться на другие, более углублённые.

Так же не забыли про безопасность и сохранность данных, которая очень нужна, чтобы был обходной путь при потери или поломки рабочего устройства, либо же кражи или утечки информации.

Надеюсь, это было полезно для вас, спасибо за чтение статьи!

Мой Github с проектами

Терминология

Зависимость — объект, который может быть использован как сервис.

Инициализация — создание, активация, подготовка к работе, определение параметров. Приведение программы или устройства в состояние готовности к использованию.

Ключ — опция, которая немного изменяет действие команды

Коммит — операция, которая отправляет последние изменения исходного кода в репозиторий, делая эти изменения частью основной ревизии репозитория

Модуль — это просто файл. Один скрипт – это один модуль

Нативный (родной) код — это код, поставляемый разработчиками технологии.

Пакет — файл или каталог, который описывается файлом.

Репозиторий — место, где хранятся и поддерживаются какие-либо данные.

Терминал — программа или устройство, используемая для взаимодействия пользователя с компьютером или компьютерной системой, локальной или удалённой

Система управления версиями — программное обеспечение для облегчения работы с изменяющейся информацией.

Среда выполнения — вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы.

Источники

https://ru.wikipedia.org/wiki/Node.js
https://docs.microsoft.com/ru-ru/windows/dev-environment/javascript/nodejs-on-windows
https://github.com/aigen31/gulp
https://www.npmjs.com/package/npm-check-updates
https://ru.wikipedia.org/wiki/Git
https://ru.wikipedia.org/wiki/PowerShell
https://en.wikipedia.org/wiki/KeePassXC
https://docs.microsoft.com/ru-ru/windows-server/administration/openssh/openssh_install_firstuse

Комментарии (20)


  1. zzzzzzzzzzzz
    15.11.2021 22:38
    +1

    Был разработан один из базовых сценариев Powershell, который позволяет избавиться от постоянной монотонной синхронизации с удалённым хостингом Git

    Но это же жесть!

    (Или, если хотите не так эмоционально -- антипаттерн)


    1. aigen31 Автор
      16.11.2021 09:27
      -3

      Здравствуйте! Предлагайте свой вариант автоматического push


      1. venanen
        17.11.2021 10:44
        +1

        Зачем?


        1. aigen31 Автор
          17.11.2021 12:25
          -1

          Почему никто не может предложить альтернативного варианта? Если вам не нужна автоматизация git push, то не делайте. Лично я каждое действие в коммитах не расписываю, у меня проекты небольшие и работаю один. В больших проектах с командой естественно нужно без автоматизации и прописывать каждый комментарий

          Определение из википедии

          PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом

          Powershell мониторит файлы и автоматизирует однотипную команду? - Автоматизирует. Является ли это костылём - нет. Потому что это встроенная функция Powershell, которая как раз и нужна для похожих ситуаций

          Разве что можно сделать push через какой-нибудь модуль NodeJS, но у меня этого не удалось

          Мне не хочется каждый раз прописывать, если за меня это может делать программа:

          git add .
          git commit -m 'update'
          git push -u origin master


          1. venanen
            17.11.2021 12:46
            +2

            Еще раз. Зачем? Зачем каждый символ комитить? Чтобы потом в этих коммитах не найти нужную версию? Вы хотите этим добиться чего? Автобекапа? Если есть риск, что все сгорит в любой момент времени - и держать файлы больше минуты без пуша - страшно, то onedrive, который автоматически все сохраняет себе. А у гита цель не просто сохранять файлы в облако, гит - это Version Control System, система, которая должна хранить не просто файлы, а версии продукта. А вы сделали из гитхаба просто облако.


            1. aigen31 Автор
              17.11.2021 17:12

              А, так вы не так поняли. Я не каждый символ коммичу, а только когда сделаю прод сборку (то есть сделаю билд). До этого момента ничего коммититься не будет. Никто не собирается каждый символ коммитить

              Более конкретно про алгоритм:

              1. Работаю над проектом

              2. Завершаю задачу

              3. Делаю билд проекта. Одна копия в папку dist, другая в локальный Git репозиторий

              4. Powershell подхватывает изменения файлов, и выполняет команды

              5. Получаем обновление в удалённом Git

              Хранить версии продукта в моём случае не нужно


              1. venanen
                17.11.2021 17:42

                Тогда зачем нужен Powershell? Если можно просто дописать команды гита в package.json?


                1. aigen31 Автор
                  17.11.2021 18:07

                  Хорошая идея, но у меня все проекты находятся в одном репозитории (а там много package.json), потому что GitHub мне нужен зачастую из-за GitHub Pages, чтобы отображать статичные страницы
                  Думаю, мне просто стоит в статье более подробно описать структуру происходящего, а то явно много чего непонятно :)


                  1. venanen
                    17.11.2021 19:18

                    У меня закрадывается мысль, что не совсем понимаете как и для чего нужна VCS. Все проекты в одном репозитории - это как вообще? Зачем? Это удобно? В каком смысле много package.json? Зачем? Так много вопросов, и так мало ответов


  1. endlessnights
    15.11.2021 23:45

    aigen31.github.io

    404
    File not found

    А насчёт onedrive и прочих — это если нужно хранить целиком все данные проекта, с учетом медиа, но обычно, на тот же github льют исходники, а медиа и бд оставляют у себя, потому что они всё равно плавающие и изменяемые чаще, да и занимают больше места, тот же gitignore — решение данной проблемы.


    1. aigen31 Автор
      16.11.2021 09:33
      +1

      Да, как раз проекты и стоит хранить в Git. Я обобщил сохранность всех файлов, которые даже могут быть связаны с проектами, но там не находятся. Допустим вам дали доступ к админке сайта, и вы сохраните инфу в менеджер паролей, а ваша БД паролей будет находиться в документах. Или другие файлы
      Понимаю, что возможно в статье что-то объяснено непонятно, но имеется ввиду так


    1. aigen31 Автор
      16.11.2021 09:47

      Да, по поводу aigen31.github.io. Из-за проверки модератором не мог выложить ссылку на исходники моей среды разработки. Сегодня сделаю обновление


  1. khv2online
    16.11.2021 09:33

    не хватает:
    - нормального html-шаблонизатора
    - инкрементальных пересборок стилей/скриптов
    - вывода сообщений об ошибках сборки в браузер или через системные push уведомления
    - сборки и раздачи в tmpfs (или хотябы указания папки для сборки)
    - соурсмапов
    - разделения на прод/дев сборки
    - ....
    короче всего не хватает - пилить и пилить еще....


    1. ZdraviiSmisl
      16.11.2021 09:41

      Посоветуйте ресурс или статью, где можно ознакомиться с "максимальной автоматизацией проекта".


      1. khv2online
        16.11.2021 12:46

        Кто же Вам расскажет как реально получить конкурентное преимущество и делать деньги? )))
        Тем более потребности у всех разные, gulp лучше собирать под конкретные процессы.
        Но могу порекоммендовать посмотреть на: gulp-esbuild, gulp-progeny+gulp-filter, gulp-mem, gulp-pug, gulp-touch-fd, gulp-postcss, gulp-stylus, gulp-prettier+gulp-stylelint… Может что-то будет полезным.


  1. MaximZeb
    16.11.2021 09:33

    Очень поверхностно, особенно Gulp)


    1. aigen31 Автор
      16.11.2021 09:42

      Да, я написал ранее, что для этого будет отдельная статья. Просто развёрнуто будет очень длинно и запутанно. А это немного другая тема


      1. ZdraviiSmisl
        16.11.2021 10:15

        Где можно посмотреть развёрнуто?


        1. aigen31 Автор
          16.11.2021 10:34

          Скоро буду писать статьи, которые будут разветвляться от этой. Лично уведомлю вас :)


  1. beDenz
    18.11.2021 21:41

    А почему gulp, а не webpack?