Gulp. Урок 2. Работа с файлами


Содержание материала:

Урок 2. Курс по Gulp. Работа с файлами

Курс по Gulp. Основы:
https://webformyself.com/category/premium/javascript-premium/gulppremium/

В этом уроке мы узнаем методы и особенности работы с файлами с помощью gulp

Из урока вы познакомитесь с тремя встроенными методами в Gulp, которые в основном нужны для работы с файлами: src, dest и pipe.

В результате данного урока мы напишем скрипт на Gulp для работы с файлами и познакомимся с особенностями работы данного инструмента с файлами.

Gulp для начинающих

Gulp – это инструмент автоматизации front-end разработки. Он поможет вам автоматизировать рутинные задачи и ускорит вашу работу. Возможно вы уже работали с другой системой сборки Grunt. Сравнение Gulp и Grunt показывает, что Gulp на данный момент более перспективный инструмент и стоит обратить на него внимание.

Основные задачи, которые вам поможет решить Gulp:

  • Минимизация и конкатенация Javascript и CSS файлов;
  • Минимизация HTML;
  • Использование CSS препроцессоров Sass, Less, Stylus и других;
  • Оптимизация изображений;
  • Автоматическая простановка вендорных префиксов;
  • Использование шаблонизаторов (Jade);
  • Удаление неиспользуемого CSS (UnCSS);
  • Валидация кода и тестирование;

Ссылки на ресурсы

Официальный сайт Gulp gulpjs.com
Gulp на Github
Каталог плагинов для Gulp http://gulpjs.com/plugins/
Документация Gulp (на английском) ссылка

Установка Gulp

На вашем компьютере должен быть установлен Node.js. Скачать его можно по ссылке. Небольшая инструкция по установке.

После установки Node.js откройте командную строку и введите команду:

npm install – это команда, которую использует Node Package Manager для установки Gulp на компьютер.

Флаг — global указывает, что Gulp надо установить на компьютер глобально для использования в любом месте системы.

Создание проекта

Создадим папку project для нашего проекта. Откройте командную строку и перейдите в папку с вашим проектом:

Команда npm init создает файл package.json, который содержит информацию о проекте (описание проекта и зависимости).

Когда файл package.json создан, мы можем установить Gulp с помощью команды:

На этот раз – g не был использован и Gulp локально установится в папку project.

— save — dev вносит в уже существующий файл package.json запись о Gulp в секцию devDependencies.

После выполнения команды вы увидите, что в директории project появилась папка node_modules, внутри которой лежит папка Gulp.

Мы почти готовы начать проект с Gulp. Но перед этим необходимо определиться со структурой проекта.

Определяем файловую структуру

Gulp достаточно гибок, чтобы работать с любой файловой структурой. В этом проекте мы будем использовать следующую структуру:

В папке app будет находится рабочая версия проекта. В папке dist будет лежат продакшн версия проекта.

Мы должны помнить об этой структуре файлов, когда конфигурируем задачи Gulp.

Создадим первую задачу в файле gulpfile . js , в котором хранится вся конфигурация Gulp.

Пишем первую задачу Gulp

Базовый синтаксис задачи Gulp:

task — name ссылается на имя задачи, которое вы будете использовать для запуска задачи. Задачу можно запустить командой gulp task-name.

Для теста создадим задачу hello, которая выведет Hello Zell!

Запустим команду gulp hello в командной строке.

В командной строке появится сообщение Hello Zell !

Задачи в Gulp обычно намного сложнее. Вот как может выглядеть реальная задача:

Как вы видите, реальная задача содержит два дополнительных метода gulp . src и gulp . dest .

gulp . src говорит, какие файлы использовать для выполнения задачи.

gulp . dest указывает, куда положить файлы после выполнения задачи.

Создадим реальную задачу, где мы скомпилируем Sass файлы в Css.

Препорцессинг с Gulp

Мы можем компилировать Sass в Css с помощью плагина gulp-sass. Для установки gulp-sass надо запустить команду:

В gulpfile . js необходимо записать:

Создадим задачу sass ( )

[/crayon]
Далее нам необходимо создать файл

в папке app/scss и указать путь к этому файлу в gulp.src. Скомпилированный файл styles.css будет лежать в папке app/css. Укажем эту папку в gulp.dest.

Для проверки правильности настройки задачи, добавим функцию sass в файл styles . scss .

Если вы запустите команду gulp sass в командной строке, то вы увидите, что в папке app/css появится файл styles . css , в котором будет следующий код:

Теперь мы знаем, как работает задача sass.

Если вам необходимо выбрать несколько файлов в gulp.src, то можно использовать специальные выражения.

  • * . scss : Символ * — означает, что будут выбраны все файлы с расширением .scss в указанной директории;
  • * / * . scss — будут выбраны все файлы с указанным расширением в корневой папке и всех дочерних папках;
  • * / * . scss . Символ ! указывает, что данный файл надо исключить из выполнения задачи;
  • * . + ( scss | sass ) — позволяет выбрать для выполнения задач файлы с несколькими расширениями. В данном случае будут выбраны все файлы с расширениями . scss и . sass из указанной директории.

Теперь мы можем заменить app/scss/styles.scss на scss/ **/*.scss.

Любой файл с расширением .scss находящийся в папке app/scss будет скомпилирован. Например, если добавить print.scss, то мы увидим, что в папке app/css появится скомпилированный файл print.css.

Топ-пост этого месяца:  Правильное время и дата Wordpress настройка разными способами

Компилируем Sass «на лету»

С помощью метода watch можно отслеживать изменения в файлах. Синтаксис метода:

Урок 2. Курс по Gulp. Работа с файлами

Просмотров: 3 075

04 февраля 2020

Олег Любин

Жаль шо нет продолжения, у докладчика хорошо получается.

JrStdnt

Подскажите пожалуйста где можно скачать и бесплатно установить WebStorm.
заранее спасибо!!)

и всё, больше уроков не будет?)

Тима Худиев

Очень классно что разбираются все функции так подробно.

Дмитрий Мартынов


Привет, спасибо за урок. Не подскажет ли кто какое-то средство для удаления не использованного кода JS именно при оптимизации разработанного сайта? Хотя бы как-то работающее) Часто бывает, что есть не мало библиотек, в каждой много не нужного кода. Или же лучше все эти библиотеки грузить с офф.сайтов и не заморачиваться?

Gulp файл и сборка CSS

Что такое Gulp, и зачем он нужен? При верстке сайтов, возникает много рутинных задач:

  • компиляция SASS/LESS файлов
  • работа с шаблонизаторами
  • проставление префиксов
  • оптимизация изображений
  • сжатие и склейка файлов

Представьте, что вы сверстали сайт и на этом работа ещё далеко не закончилась. Дальше вы открываете массу сервисов, генераторов, компиляторов и вручную начинаете дорабатывать ваш сайт. Трата драгоценного времени, на повторяющиеся действия из проекта в проект — непозволительная роскошь.

Наверняка вас посещала такая мысль: «Как бы это все это автоматизировать». А все уже давно придумано за нас, только бери и пользуйся. В народе называют его сборщиком проектов – Gulp, а по сути – это исполнитель задач (task-runner).

Кстати, как у вас обстоит дело с JavaScript? При работе с Gulp файлом, вам придется с ним подружиться, но ненадолго. Как правило, файл с Gulp тасками (task), создается один раз и копируется из проекта в проект.

На этом уроке мы рассмотрим, как создать gulp task для сборки CSS файла. На компьютере должен быть установлены node.js.

Задача: Пишем стили в SASS, а на выходе получаем простой и минифицированный CSS файл с проставленными префиксами.

Gulp проект

Создаем папку my-gulp с файлом package.json. Пишем информацию о проекте.

<
«name»: «my-gulp»,
«version»: «1.0.0»,
«description»: «gulp4»,
«author»: «дядя Вася»,
>

Устанавливаем Gulp, через командную строку:

npm i -–save-dev gulp

В папке с проектом появилась папка node_modules, на неё не обращайте никакого внимания.

Создадим в проекте:

  • gulpfile.js
  • две папки src, dist
  • style.scss

Gulp плагины

Установим плагины, поочередно вводя в командную строку:

// компилирует SASS в CSS
npm i gulp-sass —save-dev

// проставляет префиксы
npm i gulp-autoprefixer —save-dev

// делает красивый CSS код
npm i gulp-cssbeautify —save-dev

// сжимает CSS файл
npm i gulp-cssnano —save-dev

// удаляет комментарии
npm i gulp-strip-css-comments —save-dev

// добавляет суффикс min к сжатой версии
npm i gulp-rename —save-dev

Дословно: Инсталлировать gulp модули из пакетного менеджера и сохранить зависимости в package.json.

Пример Gulp файла для сборки CSS

// подключаем gulp
const gulp = require («gulp»);

// создадим две переменные, отвечающие за чтение исходных файлов (src) и запись сгенерированных файлов (dest).
const = require («gulp»);

// передаем модули в переменные
const autoprefixer = require («gulp-autoprefixer»);
const cssbeautify = require («gulp-cssbeautify»);
const removeComments = require («gulp-strip-css-comments»);
const rename = require («gulp-rename»);
const sass = require («gulp-sass»);
const cssnano = require («gulp-cssnano»);

Мы пишем SASS код в файле style.scss, Gulp выполняет таски и складывает готовые style.css + style.min.css, в папку dist. Однако сам Gulp не знает, откуда брать и куда перемещать, надо указать пути.

Создадим объект path с двумя вложенными объектами. Готовый CSS код, будет перемещаться из папки src в папку dist.

Создаем Gulp task для CSS

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

Компилируем SASS файлы в CSS

Расставляем префиксы в каскадном виде с учетом 8-ми последних версий браузеров.

function css () <
return src(path.src.css, )
.pipe(sass())
.pipe(autoprefixer( <
Browserslist: [‘last 8 versions’],
cascade: true
>))

Преобразует код к аккуратному виду. Перемещает готовый CSS код туда, куда мы указывали в путях. Удаляет пробелы, комментарии, создает два CSS файла, один из которых минифицированный. Делает экспорт.

.pipe(cssbeautify())
.pipe(dest(path.build.css))
.pipe(cssnano( <
zindex: false,
discardComments: <
removeAll: true
>
>))
.pipe(removeComments())
.pipe(rename( <
suffix: «.min»,
extname: «.css»
>))
.pipe(dest(path.build.css))
>
exports.css = css;

Помимо таска для сборки CSS, в gulpfile.js пишутся таски для html, js и изображений.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Урок 2. Курс по Gulp. Работа с файлами

    Опубликовано 3 лет назад

    Урок 2. Курс по Gulp. Работа с файлами

    Курс по Gulp. Основы:

    В этом уроке мы узнаем методы и особенности работы с файлами с помощью gulp

    Из урока вы познакомитесь с тремя встроенными методами в Gulp, которые в основном нужны для работы с файлами: src, dest и pipe.

    В результате данного урока мы напишем скрипт на Gulp для работы с файлами и познакомимся с особенностями работы данного инструмента с файлами.

    Топ-пост этого месяца:  Добавить класс у виводимий стандартний контент Wordpress

    Скачать — Урок 2. Курс по Gulp. Работа с файлами

    WebForMySelf

    �� Комментарии к видео

    Подскажите пожалуйста где можно скачать и бесплатно установить
    заранее спасибо!!)

    Жаль шо нет продолжения, у докладчика хорошо получается.

    Очень классно что разбираются все функции так подробно.

    Привет, спасибо за урок. Не подскажет ли кто какое-то средство для удаления не использованного кода JS именно при оптимизации разработанного сайта? Хотя бы как-то работающее) Часто бывает, что есть не мало библиотек, в каждой много не нужного кода. Или же лучше все эти библиотеки грузить с офф.сайтов и не заморачиваться?

    • ⇥ Автовоспроизвидение

    Learn JavaScript in 7 minutes | Create Interactive Websites | Code in 5

    Урок 1. Курс по Gulp. Что такое Gulp и его установка


    Let’s Learn ES6 — Modules

    Webpack 3 vs Gulp 3

    Создание Pomodoro-таймера с использованием C# и Blazor. Часть 2

    Уроки Bootstrap 4 — Начинаем проект. Делаем адаптивное меню

    8.5: Saving Data to JSON File with Node.js — Programming with Text

    Загрузка файла с Google Drive при помощи PHP

    Уроки JavaScript | Урок №1 — Вступление

    Sass для самых маленьких — подробное руководство

    Learning Gulp #4 — Watching Files With Gulp

    Advanced SVG: icon symbols

    Webpack 1: Введение

    Для людей, что хотят постоянно совершенствоваться, чему-то обучаться и постоянно изучать что-то новое, мы специально сделали эту категорию. В ней исключительно образовательный, полезный контент, который, безусловно, придется Вам по вкусу. Большое количество видео, пожалуй, могут посоревноваться даже с образованием, которое нам дают в школе, в колледже или университете. Самым большим достоинством обучающих видео является то, что они стараются давать самую свежую, самую актуальную информацию. Мир вокруг нас в эру технологий постоянно меняется, и печатные обучающие издания просто не успевают выдавать свежую информацию.

    Среди роликов также можно найти и обучающие видео для детей дошкольного возраста. Там Вашего ребенка обучат буквам, цифрам, счету, чтению и т.д. Согласитесь, очень даже неплохая альтернатива мультикам. Для учеников начальных классов также можно найти обучения английскому языку, помощь в изучении школьных предметов. Для более старших учеников созданы обучающие ролики, которые помогут подготовиться к контрольным, к экзаменам либо же просто углубить свои познания в каком-то определенном предмете. Приобретенные знания могут качественным образом сказаться на их умственном потенциале, а также Вас порадовать отличными оценками.

    Для молодых людей, что уже окончили школу, учатся или не учатся в университете, есть множество увлекательных образовательных видео. Они им могут помочь в углублении знаний по профессии, на которую учатся. Или же получить профессию, например программиста, веб-дизайнера, SEO-оптимизатора и прочее. Таким профессия пока в университетах не учат, поэтому специалистом в этой продвинутой и актуальной сфере можно стать только занимаясь самообразованием, в чем мы и стараемся помочь, собирая самые полезные ролики.

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

    Также среди образовательных роликов есть видео с общей направленностью, которые подойдут для практически любого возраста, в них можно узнать о том, как зарождалась жизнь, какие теории эволюции существуют, факты из истории и т.д. Они отлично расширяют кругозор человека, делают его гораздо более эрудированным и приятным интеллектуальным собеседником. Такие познавательные видео, действительно, полезно смотреть всем без исключения, так как знание – это сила. Желаем Вам приятного и полезного просмотра!

    В наше время просто необходимо быть, что называется «на волне». Имеется в виду не только новости, но и развитие собственного ума. Если Вы хотите развиваться, познавать мир, быть востребованным в обществе и интересным, то этот раздел именно для Вас.

    Урок 2. Курс по Gulp. Работа с файлами

    Опубликовано 3 лет назад

    Урок 2. Курс по Gulp. Работа с файлами

    Курс по Gulp. Основы:

    В этом уроке мы узнаем методы и особенности работы с файлами с помощью gulp

    Из урока вы познакомитесь с тремя встроенными методами в Gulp, которые в основном нужны для работы с файлами: src, dest и pipe.

    В результате данного урока мы напишем скрипт на Gulp для работы с файлами и познакомимся с особенностями работы данного инструмента с файлами.

    Скачать — Урок 2. Курс по Gulp. Работа с файлами

    WebForMySelf

    �� Комментарии к видео

    Подскажите пожалуйста где можно скачать и бесплатно установить
    заранее спасибо!!)

    Жаль шо нет продолжения, у докладчика хорошо получается.

    Очень классно что разбираются все функции так подробно.

    Привет, спасибо за урок. Не подскажет ли кто какое-то средство для удаления не использованного кода JS именно при оптимизации разработанного сайта? Хотя бы как-то работающее) Часто бывает, что есть не мало библиотек, в каждой много не нужного кода. Или же лучше все эти библиотеки грузить с офф.сайтов и не заморачиваться?

    • ⇥ Автовоспроизвидение

    Learn JavaScript in 7 minutes | Create Interactive Websites | Code in 5

    Урок 1. Курс по Gulp. Что такое Gulp и его установка

    Let’s Learn ES6 — Modules

    Webpack 3 vs Gulp 3

    Создание Pomodoro-таймера с использованием C# и Blazor. Часть 2

    Уроки Bootstrap 4 — Начинаем проект. Делаем адаптивное меню

    8.5: Saving Data to JSON File with Node.js — Programming with Text

    Загрузка файла с Google Drive при помощи PHP

    Уроки JavaScript | Урок №1 — Вступление

    Sass для самых маленьких — подробное руководство

    Learning Gulp #4 — Watching Files With Gulp

    Advanced SVG: icon symbols

    Webpack 1: Введение

    Для людей, что хотят постоянно совершенствоваться, чему-то обучаться и постоянно изучать что-то новое, мы специально сделали эту категорию. В ней исключительно образовательный, полезный контент, который, безусловно, придется Вам по вкусу. Большое количество видео, пожалуй, могут посоревноваться даже с образованием, которое нам дают в школе, в колледже или университете. Самым большим достоинством обучающих видео является то, что они стараются давать самую свежую, самую актуальную информацию. Мир вокруг нас в эру технологий постоянно меняется, и печатные обучающие издания просто не успевают выдавать свежую информацию.

    Топ-пост этого месяца:  Как в CMS Joomla установить русский язык

    Среди роликов также можно найти и обучающие видео для детей дошкольного возраста. Там Вашего ребенка обучат буквам, цифрам, счету, чтению и т.д. Согласитесь, очень даже неплохая альтернатива мультикам. Для учеников начальных классов также можно найти обучения английскому языку, помощь в изучении школьных предметов. Для более старших учеников созданы обучающие ролики, которые помогут подготовиться к контрольным, к экзаменам либо же просто углубить свои познания в каком-то определенном предмете. Приобретенные знания могут качественным образом сказаться на их умственном потенциале, а также Вас порадовать отличными оценками.

    Для молодых людей, что уже окончили школу, учатся или не учатся в университете, есть множество увлекательных образовательных видео. Они им могут помочь в углублении знаний по профессии, на которую учатся. Или же получить профессию, например программиста, веб-дизайнера, SEO-оптимизатора и прочее. Таким профессия пока в университетах не учат, поэтому специалистом в этой продвинутой и актуальной сфере можно стать только занимаясь самообразованием, в чем мы и стараемся помочь, собирая самые полезные ролики.

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

    Также среди образовательных роликов есть видео с общей направленностью, которые подойдут для практически любого возраста, в них можно узнать о том, как зарождалась жизнь, какие теории эволюции существуют, факты из истории и т.д. Они отлично расширяют кругозор человека, делают его гораздо более эрудированным и приятным интеллектуальным собеседником. Такие познавательные видео, действительно, полезно смотреть всем без исключения, так как знание – это сила. Желаем Вам приятного и полезного просмотра!

    В наше время просто необходимо быть, что называется «на волне». Имеется в виду не только новости, но и развитие собственного ума. Если Вы хотите развиваться, познавать мир, быть востребованным в обществе и интересным, то этот раздел именно для Вас.

    Урок 2. Курс по Gulp. Работа с файлами

    Смотреть видео Урок 2. Курс по Gulp. Работа с файлами на ВХайпе бесплатно

    66 | 1
    WebForMySelf | 3 год.

    Курс по Gulp. Основы:
    https://webformyself.com/category/premium/javascript-premium/gulppremium/

    В этом уроке мы узнаем методы и особенности работы с файлами с помощью gulp

    Из урока вы познакомитесь с тремя встроенными методами в Gulp, которые в основном нужны для работы с файлами: src, dest и pipe.

    В результате данного урока мы напишем скрипт на Gulp для работы с файлами и познакомимся с особенностями работы данного инструмента с файлами.

    Урок 2. Курс по Gulp. Работа с файлами

    Курс по Gulp. Основы:
    [ссылка]

    В этом уроке мы узнаем методы и особенности работы с файлами с помощью gulp

    Из урока вы познакомитесь с тремя встроенными методами в Gulp, которые в основном нужны для работы с файлами: src, dest и pipe.

    В результате данного урока мы напишем скрипт на Gulp для работы с файлами и познакомимся с особенностями работы данного инструмента с файлами.

    Урок 2. Курс по Gulp. Работа с файлами — [ссылка]

    • © 2014 — 2020 MosCatalogue.net
    • Блог
    • Запросы
    • Правообладателям
    • Отказ от ответственности
    • Политика конфиденциальности
    • Пользовательское соглашение
    • О сервисе
    • Контакты

    О сервисе MosCatalogue.net

    MosCatalogue.net — это сервис, который предоставляет вам возможность быстро, бесплатно и без регистрации скачать видео с YouTube в хорошем качестве. Вы можете скачать видео в форматах MP4 и 3GP, кроме того можно скачать видео любого типа.

    Ищите, смотрите, скачивайте видео — все это бесплатно и на большой скорости. Вы даже можете найти фильмы и скачать их. Результаты поиска можно сортировать, что упрощает поиск нужного видео.

    Скачать бесплатно можно фильмы, клипы, эпизоды, трейлеры, при этом вам не нужно посещать сам сайт Youtube.

    Скачивайте и смотрите океан бесконечного видео в хорошем качестве. Все бесплатно и без регистрации!

    Урок 1. Курс по Gulp. Что такое Gulp и его установка

    Курс по Gulp. Основы:
    https://webformyself.com/category/premium/javascript-premium/gulppremium/

    В этом уроке мы начнем разбирать один из самых быстрых таск-ранеров на рынке — gulp. Мы узнаем как его установить и запустить первую задачу

    Из урока вы узнаете что такое Gulp, как его установить с помощью пакетного менеджера NPM.

    В результате данного урока мы установим Gulp как локально, так и глобально, узнаем зачем делать 2 разные установки. Также мы создадим первую тестовую задачу и разберем как это работает.

    Урок 1. Курс по Gulp. Что такое Gulp и его установка — https://www.youtube.com/watch?v=4SeOKWCWkeY

    Видео Урок 1. Курс по Gulp. Что такое Gulp и его установка канала WebForMySelf

    GULP создание 2 файлов

    Использую GULP, less, minify-css, rename

    Как можно сделать что бы из LESS делалось 2 файла один с minify-css, rename, а второй бросался просто рядом обычным CSS без каких либо сжатий и т.д. ?

    1 ответ 1

    Решил проблему просто добавив еще одну задачу для LESS убрав из нее minify-css, rename

    Всё ещё ищете ответ? Посмотрите другие вопросы с метками gulp или задайте свой вопрос.

    Похожие

    Подписаться на ленту

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.7.35374

    Добавить комментарий