GithubHelp home page GithubHelp logo

andrewalexeich / gulp-pug-starter Goto Github PK

View Code? Open in Web Editor NEW
301.0 17.0 103.0 8.67 MB

Frontend development with pleasure. Pug + SCSS version

License: GNU General Public License v3.0

JavaScript 80.65% SCSS 3.16% Pug 15.81% Shell 0.38%
starter-kit starter-project starter web web-development development-tools development-environment development-workflow gulp bem

gulp-pug-starter's Introduction

gulp-pug-starter

License GitHub stars GitHub watchers

🔥 Особенности

  • именование классов по БЭМ
  • используется БЭМ-структура
  • используются препроцессоры Pug и SCSS
  • используется транспайлер Babel для поддержки современного JavaScript (ES6) в браузерах
  • используется Webpack для сборки JavaScript-модулей
  • используется жёсткий кодгайд
  • используется проверка кода на ошибки перед коммитом

🛠️ Установка

  • установите NodeJS
  • установите глобально:
  • скачайте сборку с помощью Git: git clone https://github.com/andreyalexeich/gulp-pug-starter.git
  • перейдите в скачанную папку со сборкой: cd gulp-pug-starter
  • введите yarn set version berry
  • скачайте необходимые зависимости: yarn
  • чтобы начать работу, введите команду: yarn run dev (режим разработки)
  • чтобы собрать проект, введите команду yarn run build (режим сборки)

Если вы всё сделали правильно, у вас должен открыться браузер с локальным сервером. Режим сборки предполагает оптимизацию проекта: сжатие изображений, минифицирование CSS и JS-файлов для загрузки на сервер.

📂 Файловая структура

gulp-pug-starter
├── dist
├── gulp-tasks
├── src
│   ├── blocks
│   ├── fonts
│   ├── img
│   ├── js
│   ├── styles
│   ├── views
│   └── .htaccess
├── gulpfile.babel.js
├── webpack.config.js
├── package.json
├── .yarnrc.yml
├── .babelrc.js
├── .bemrc.js
├── .eslintrc.json
├── .stylelintrc
├── .stylelintignore
└── .gitignore
  • Корень папки:
    • .babelrc.js — настройки Babel
    • .bemrc.js — настройки БЭМ
    • .eslintrc.json — настройки ESLint
    • .gitignore – запрет на отслеживание файлов Git'ом
    • .stylelintrc — настройки Stylelint
    • .stylelintignore – запрет на отслеживание файлов Stylelint'ом
    • .yarnrc.yml – настройка Yarn
    • gulpfile.babel.js — настройки Gulp
    • webpack.config.js — настройки Webpack
    • package.json — список зависимостей
  • Папка src - используется во время разработки:
    • БЭМ-блоки и компоненты: src/blocks
    • шрифты: src/fonts
    • изображения: src/img
    • JS-файлы: src/js
    • страницы сайта: src/views/pages
    • SCSS-файлы: src/styles
    • служебные Pug-файлы: src/views
    • конфигурационный файл веб-сервера Apache с настройками gzip (сжатие без потерь): src/.htaccess
  • Папка dist - папка, из которой запускается локальный сервер для разработки (при запуске yarn run dev)
  • Папка gulp-tasks - папка с Gulp-тасками

⌨️ Команды

  • yarn run lint:styles - проверить SCSS-файлы. Для VSCode необходимо установить плагин. Для WebStorm или PHPStorm необходимо включить Stylelint в Languages & Frameworks - Style Sheets - Stylelint (ошибки будут исправлены автоматически при сохранении файла)
  • yarn run dev - запуск сервера для разработки проекта
  • yarn run build - собрать проект с оптимизацией без запуска сервера
  • yarn run build:views - скомпилировать Pug-файлы
  • yarn run build:styles - скомпилировать SCSS-файлы
  • yarn run build:scripts - собрать JS-файлы
  • yarn run build:images - собрать изображения
  • yarn run build:webp - сконвертировать изображения в формат .webp
  • yarn run build:sprites- собрать спрайты
  • yarn run build:fonts - собрать шрифты
  • yarn run build:favicons - собрать фавиконки
  • yarn run build:gzip - собрать конфигурацию Apache
  • yarn run bem-m - добавить БЭМ-блок
  • yarn run bem-c - добавить компонент
  • yarn run lint:styles --fix - исправить ошибки в SCSS-файлах согласно настройкам Stylelint
  • yarn run lint:scripts - проверить JS-файлы
  • yarn run lint:scripts --fix - исправить ошибки в JS-файлах согласно настройкам ESLint

💡 Рекомендации по использованию

Компонентный подход к разработке сайтов

  • каждый БЭМ-блок имеет свою папку внутри src/blocks/modules
  • папка одного БЭМ-блока содержит в себе один Pug-файл, один SCSS-файл и один JS-файл (если у блока используется скрипт)
    • Pug-файл блока импортируется в файл src/views/index.pug (или в необходимый файл страницы, откуда будет вызываться блок)
    • SCSS-файл блока импортируется в файл src/blocks/modules/_modules.scss
    • JS-файл блока импортируется в src/js/import/modules.js

Пример структуры папки с БЭМ-блоком:

blocks
├── modules
│   ├── header
│   │   ├── header.pug
│   │   ├── header.js
│   │   ├── header.scss

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

  • yarn run bem-m my-block - для создания БЭМ-блока в src/block/modules (для основных БЭМ-блоков), где my-block - имя БЭМ-блока (после создания нужно удалить содержимое js-файла БЭМ-блока);
  • yarn run bem-с my-component - для создания компонента в src/blocks/components (для компонентов), где my-component - имя компонента (после создания нужно удалить содержимое js-файла БЭМ-компонента);

Компоненты

  • компоненты (например, иконки, кнопки) оформляются в Pug с помощью примесей
  • каждый компонент имеет свою папку внутри src/blocks/components
  • папка одного компонента содержит в себе один Pug-файл, один SCSS-файл и один JS-файл (если у компонента используется скрипт)
    • Pug-файл компонента импортируется в файл главной страницы src/views/index.pug (или в необходимый файл страницы, откуда будет вызываться компонент)
    • SCSS-файл компонента импортируется в файл src/blocks/components/_components.scss
    • JS-файл компонента импортируется в файл src/js/import/components.js

Страницы проекта

  • страницы проекта находятся в папке src/views/pages
    • каждая страница (в том числе главная) наследует шаблон src/views/layouts/default.pug
    • главная страница: src/views/index.pug

Шрифты

  • шрифты находятся в папке src/fonts
    • используйте форматы .woff и .woff2
    • шрифты подключаются в файл src/styles/base/_fonts.scss
    • сконвертировать локальные шрифты можно с помощью данного сервиса

Изображения

  • изображения находятся в папке src/img
    • изображения автоматически конвертируются в формат .webp. Подробная информация по использованию тут
    • изображение для генерации фавиконок должно находиться в папке src/img/favicon и иметь размер не менее 1024px x 1024px

SVG-спрайты

Для создания спрайтов изображения .svg должны находиться в папке src/img/sprites. Например, у нас есть файлы icon-1.svg, icon-2.svg и icon-3.svg, и мы должны обратиться к icon-2.svg. Для этого в HTML нужно воспользоваться тегом use:

svg
    use(xlink:href="img/sprites/sprite.svg#logo")

Изменить стили svg-иконки из спрайта в CSS:

svg use {
    fill: red;
}

Бывает такая ситуация, когда стили иконки поменять не получается. Это связано с тем, что при экспорте из Figma в svg добавляется лишний код. Например:

<svg width="18" height="19" viewBox="0 0 18 19" fill="none" xmlns="http://www.w3.org/2000/svg">
  <path d="M4.90918 4.04542L13.091 9.54088L4.90918 14.9545L4.90918 4.04542Z" fill="#1B1B1D"/>
</svg>

Нужно удалить fill="none" и fill="#1B1B1D". Должно получиться так:

<svg width="18" height="19" viewBox="0 0 18 19" xmlns="http://www.w3.org/2000/svg">
  <path d="M4.90918 4.04542L13.091 9.54088L4.90918 14.9545L4.90918 4.04542Z"/>
</svg> 

Сторонние библиотеки

  • все сторонние библиотеки устанавливаются в папку node_modules
    • для их загрузки воспользуйтеcь командой yarn add package_name
    • для подключения JS-файлов библиотек импортируйте их в самом начале JS-файла БЭМ-блока (то есть тот БЭМ-блок, который использует скрипт), например:
    import $ from "jquery";
    • для подключения стилевых файлов библиотек импортируйте их в файл src/styles/vendor/_libs.scss
    • JS-файлы и стилевые файлы библиотек самостоятельно изменять нельзя

👉 Нужен SCSS без Pug?

Используйте эту сборку.

💛 Нравится проект?

Сообщайте мне о багах, ставьте звёздочку, задонатьте мне Telegram TON на пиво 🍺

✉️ Контакты

По всем вопросам пишите в Telegram

gulp-pug-starter's People

Contributors

alexdev27 avatar andrewalexeich avatar rushelex avatar zebren avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gulp-pug-starter's Issues

bem-tools-core@bem-tools/bem-tools-core: Failed listing refs

При установке получаю вот такую ошибку во время шага yarn. Работаю на Маке. Версия Node v15.14.0

(base) ➜  gulp-pug-starter git:(master) ✗ yarn set version berry
➤ YN0000: Retrieving https://repo.yarnpkg.com/3.2.0/packages/yarnpkg-cli/bin/yarn.js
➤ YN0000: Saving the new release in .yarn/releases/yarn-3.2.0.cjs
➤ YN0000: Done in 0s 506ms
(base) ➜  gulp-pug-starter git:(master) ✗ yarn
➤ YN0000: ┌ Resolution step
➤ YN0061: │ chokidar@npm:2.1.8 is deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
➤ YN0032: │ fsevents@npm:2.3.2: Implicit dependencies on node-gyp are discouraged
➤ YN0061: │ fsevents@npm:1.2.13 is deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
**➤ YN0001: │ bem-tools-core@bem-tools/bem-tools-core: Failed listing refs
➤ YN0001: │   Repository URL: ssh://[email protected]/bem-tools/bem-tools-core.git
➤ YN0001: │   [email protected] Error: Permission denied (publickey).
➤ YN0001: │   Fatal Error: Could not read from remote repository.
➤ YN0001: │   Exit Code: 128
➤ YN0000: └ Completed in 3s 775ms
➤ YN0000: Failed with errors in 3s 783ms**
➤ YN0032: nan@npm:2.15.0: Implicit dependencies on node-gyp are discouraged
➤ YN0061: source-map-resolve@npm:0.6.0 is deprecated: See https://github.com/lydell/source-map-resolve#deprecated
➤ YN0061: source-map-resolve@npm:0.5.3 is deprecated: See https://github.com/lydell/source-map-resolve#deprecated
➤ YN0032: sharp@npm:0.28.3: Implicit dependencies on node-gyp are discouraged
➤ YN0061: svgo@npm:1.3.2 is deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x.
➤ YN0061: phantomjs-prebuilt@npm:2.1.16 is deprecated: this package is now deprecated
➤ YN0061: resolve-url@npm:0.2.1 is deprecated: https://github.com/lydell/resolve-url#deprecated
➤ YN0061: uuid@npm:3.4.0 is deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
➤ YN0061: uuid@npm:2.0.3 is deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
➤ YN0061: source-map-url@npm:0.4.1 is deprecated: See https://github.com/lydell/source-map-url#deprecated
➤ YN0061: urix@npm:0.1.0 is deprecated: Please see https://github.com/lydell/urix#deprecated
➤ YN0032: node-addon-api@npm:3.2.1: Implicit dependencies on node-gyp are discouraged
➤ YN0061: mkdirp@npm:0.5.1 is deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
➤ YN0061: request@npm:2.88.2 is deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
➤ YN0061: har-validator@npm:5.1.5 is deprecated: this library is no longer supported
➤ YN0061: gulp-util@npm:3.0.8 is deprecated: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
➤ YN0061: core-js@npm:2.6.12 is deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
(base) ➜  gulp-pug-starter git:(master) ✗ 

Sourcemap for styles is not working correctly

Test conditions:

  1. clean build
  2. test styles are written for .test .test2 .test3 elements in header.scss, footer.scss, main.scss files

Expected:
when .test element is selected in developer mode ( chrome and ff ) the source of styles should be header.scss; .test2 - footer.scss; .test - main.scss

Actual behavior:
When selecting any test element, the style source is one - main.scss, clicking on it takes you to the last line in main.scss.

sass autoprefixer

Не подскажите, как подключить autoprefixer?

Ошибка при сборке проекта

Здравствуйте, при сборке ругается на отсутствие зависимости

[12:33:28] Plumber found unhandled error:
 Error in plugin 'gulp-sass'
Message:
    src\styles\main.scss
Error: File to import not found or unreadable: base/variables.
        on line 1 of src/styles/main.scss
>> @import "base/variables";

   ^

Details:
    status: 1
    file: C:/samdump/prj/twindo-ru/pg/src/styles/main.scss
    line: 1
    column: 1
    formatted: Error: File to import not found or unreadable: base/variables.
        on line 1 of src/styles/main.scss
>> @import "base/variables";

   ^

    messageFormatted: src\styles\main.scss
Error: File to import not found or unreadable: base/variables.
        on line 1 of src/styles/main.scss
>> @import "base/variables";

   ^

    messageOriginal: File to import not found or unreadable: base/variables.
    relativePath: src\styles\main.scss

vendor.js - not found

Добрый день, спасибо за проект.
Сейчас при первой установке и запуске (yarn run dev) ловлю ошибку в консоли браузера vendor.js - not found (404). В чем проблема может быть?

Ошибка при подключении нового компонента

При создании нового компонента генерируется такой типовой код

modules.define("decor-btn", ["i-bem-dom"], function(provide, bemDom) { provide(bemDom.declBlock(this.name, { onSetMod: { js: { inited: function() { //some js } } } })); });

в итоге линтер ругается на этот компонент "error 'modules' is not defined no-undef" и на странице возникают аналогичные ошибки "decor-btn.js:2 Uncaught TypeError: Cannot read property 'define' of undefined"

как объявить modules и в чем может быть проблема?

Ошибка при импорте шрифтов

Привет, тестирую твою сборку и столкнулся с интересным багом - при попытке подключить шрифт с несколькими начертаниями от гугл шрифтов по-тихому отваливаются стили, ошибок в консоли нет.
Например пробовал подключить этот : @import url('https://fonts.googleapis.com/css2?family=Raleway:wght@300;400;600&display=swap'); если подключать только одно начертание, т.е. когда в адресе нет точки с запятой всё работает корректно.

inotify@npm:1.4.6 couldn't be built successfully

При исполнении шага yarn получаю вот такую ошибку.

(base) ➜  gulp-pug-starter git:(master) ✗ node -v
v15.14.0
(base) ➜  gulp-pug-starter git:(master) ✗ yarn                                 
➤ YN0000: ┌ Resolution step
➤ YN0002: │ stylelint-config-recommended-scss@npm:5.0.2 [55b96] doesn't provide postcss (p11620), requested by postcss-scss
➤ YN0000: │ Some peer dependencies are incorrectly met; run yarn explain peer-requirements <hash> for details, where <hash> is the six-letter p-prefixed code
➤ YN0000: └ Completed
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed in 0s 225ms
➤ YN0000: ┌ Link step
➤ YN0007: │ inotify@npm:1.4.6 must be built because it never has been before or the last one failed
➤ YN0009: │ inotify@npm:1.4.6 couldn't be built successfully (exit code 1, logs can be found here: /tmp/xfs-dc5119b7/build.log)
➤ YN0000: └ Completed in 0s 998ms
➤ YN0000: Failed with errors in 1s 475ms

Прилагаю соответствующий лог.

# This file contains the result of Yarn building a package (inotify@npm:1.4.6)
# Script code: node-gyp rebuild

gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp info find Python using Python version 3.7.0 found at "/home/user/miniconda3/bin/python3"
gyp info spawn /home/user/miniconda3/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/user/tmp/gulp-pug-starter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/user/tmp/gulp-pug-starter/node_modules/inotify/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/user/tmp/gulp-pug-starter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/user/.cache/node-gyp/15.14.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/user/.cache/node-gyp/15.14.0',
gyp info spawn args   '-Dnode_gyp_dir=/home/user/tmp/gulp-pug-starter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/user/.cache/node-gyp/15.14.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/user/tmp/gulp-pug-starter/node_modules/inotify',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/user/tmp/gulp-pug-starter/node_modules/inotify/build'
  CXX(target) Release/obj.target/inotify/src/bindings.o
In file included from ../src/bindings.cc:2:
../src/bindings.h:10:27: error: ‘Handle’ has not been declared
   10 |    static void Initialize(Handle<Object> target);
      |                           ^~~~~~
../src/bindings.h:10:33: error: expected ‘,’ or ‘...’ before ‘<’ token
   10 |    static void Initialize(Handle<Object> target);
      |                                 ^
../src/bindings.cc:11:27: error: variable or field ‘Initialize’ declared void
   11 |  void Inotify::Initialize(Handle<Object> exports) {
      |                           ^~~~~~
../src/bindings.cc:11:27: error: ‘Handle’ was not declared in this scope
../src/bindings.cc:11:40: error: expected primary-expression before ‘>’ token
   11 |  void Inotify::Initialize(Handle<Object> exports) {
      |                                        ^
../src/bindings.cc:11:42: error: ‘exports’ was not declared in this scope
   11 |  void Inotify::Initialize(Handle<Object> exports) {
      |                                          ^~~~~~~
../src/bindings.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE NodeInotify::Inotify::AddWatch(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/bindings.cc:146:43: error: no matching function for call to ‘v8::Value::ToObject()’
  146 |   Local<Object> args_ = info[0]->ToObject();
      |                                           ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2868:44: note: candidate: ‘v8::MaybeLocal<v8::Object> v8::Value::ToObject(v8::Local<v8::Context>) const’
 2868 |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
      |                                            ^~~~~~~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2868:44: note:   candidate expects 1 argument, 0 provided
../src/bindings.cc:149:27: error: no matching function for call to ‘v8::Object::Has(v8::Local<v8::String>&)’
  149 |   if (!args_->Has(path_sym)) {
      |                           ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3798 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, uint32_t)’
 3804 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, uint32_t index);
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:154:31: error: no matching function for call to ‘v8::Object::Has(v8::Local<v8::String>&)’
  154 |   if (!args_->Has(callback_sym) ||
      |                               ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3798 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, uint32_t)’
 3804 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, uint32_t index);
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:155:28: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>&)’
  155 |    !args_->Get(callback_sym)->IsFunction()) {
      |                            ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:160:32: error: no matching function for call to ‘v8::Object::Has(v8::Local<v8::String>&)’
  160 |   if (!args_->Has(watch_for_sym)) {
      |                                ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3798 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3798:37: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, uint32_t)’
 3804 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, uint32_t index);
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3804:37: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:163:33: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>&)’
  163 |    if (!args_->Get(watch_for_sym)->IsInt32()) {
      |                                 ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:166:36: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>&)’
  166 |    mask |= args_->Get(watch_for_sym)->Int32Value();
      |                                    ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:172:45: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>&)’
  172 |   String::Utf8Value path(args_->Get(path_sym));
      |                                             ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:182:61: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>&)’
  182 |   inotify->handle()->Set(descriptor, args_->Get(callback_sym));
      |                                                             ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE NodeInotify::Inotify::RemoveWatch(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/bindings.cc:195:31: error: no matching function for call to ‘v8::Value::Int32Value()’
  195 |   watch = info[0]->Int32Value();
      |                               ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2915:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
 2915 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
      |                                        ^~~~~~~~~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2915:40: note:   candidate expects 1 argument, 0 provided
../src/bindings.cc: In static member function ‘static void NodeInotify::Inotify::Callback(uv_poll_t*, int, int)’:
../src/bindings.cc:262:86: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
  262 |     obj->Set(Nan::New<String>("watch").ToLocalChecked(), Nan::New<Integer>(event->wd));
      |                                                                                      ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
 3716 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note:   candidate expects 3 arguments, 2 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
 3719 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note:   candidate expects 3 arguments, 2 provided
../src/bindings.cc:263:87: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
  263 |     obj->Set(Nan::New<String>("mask").ToLocalChecked(), Nan::New<Integer>(event->mask));
      |                                                                                       ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
 3716 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note:   candidate expects 3 arguments, 2 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
 3719 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note:   candidate expects 3 arguments, 2 provided
../src/bindings.cc:264:91: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
  264 |     obj->Set(Nan::New<String>("cookie").ToLocalChecked(), Nan::New<Integer>(event->cookie));
      |                                                                                           ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
 3716 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note:   candidate expects 3 arguments, 2 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
 3719 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note:   candidate expects 3 arguments, 2 provided
../src/bindings.cc:267:104: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, v8::Local<v8::String>)’
  267 |      obj->Set(Nan::New<String>("name").ToLocalChecked(), Nan::New<String>(event->name).ToLocalChecked());
      |                                                                                                        ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
 3716 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3716:37: note:   candidate expects 3 arguments, 2 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
 3719 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
      |                                     ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3719:37: note:   candidate expects 3 arguments, 2 provided
../src/bindings.cc:275:66: error: no matching function for call to ‘v8::Object::Get(Nan::imp::IntegerFactory<v8::Integer>::return_t)’
  275 |     Local<Value> value = handle->Get(Nan::New<Integer>(event->wd));
      |                                                                  ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3763 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3763:43: note:   candidate expects 2 arguments, 1 provided
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
 3766 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
      |                                           ^~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:3766:43: note:   candidate expects 2 arguments, 1 provided
../src/bindings.cc:279:34: warning: ‘v8::Local<v8::Value> Nan::Callback::Call(v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’ is deprecated [-Wdeprecated-declarations]
  279 |     callback.Call(handle, 1, argv);
      |                                  ^
In file included from ../src/node_inotify.h:14,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
../../nan/nan.h:1722:3: note: declared here
 1722 |   Call(v8::Local<v8::Object> target
      |   ^~~~
../src/bindings.cc:285:34: error: no matching function for call to ‘v8::Value::ToString()’
  285 |      handle->Delete(wd->ToString());
      |                                  ^
In file included from /home/user/.cache/node-gyp/15.14.0/include/node/node.h:63,
                 from ../src/node_inotify.h:5,
                 from ../src/bindings.h:4,
                 from ../src/bindings.cc:2:
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2856:44: note: candidate: ‘v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const’
 2856 |   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
      |                                            ^~~~~~~~
/home/user/.cache/node-gyp/15.14.0/include/node/v8.h:2856:44: note:   candidate expects 1 argument, 0 provided
make: *** [inotify.target.mk:112: Release/obj.target/inotify/src/bindings.o] Error 1
make: Leaving directory '/home/user/tmp/gulp-pug-starter/node_modules/inotify/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/user/tmp/gulp-pug-starter/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (node:events:369:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
gyp ERR! System Linux 5.16.0+
gyp ERR! command "/home/user/.nvm/versions/node/v15.14.0/bin/node" "/home/user/tmp/gulp-pug-starter/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/user/tmp/gulp-pug-starter/node_modules/inotify
gyp ERR! node -v v15.14.0
gyp ERR! node-gyp -v v9.0.0
gyp ERR! not ok 

Source maps для css, работают неправильно

Воспроизводится очень просто: запустить новый проект, посмотреть стили картинки 'img-responsive', source maps ссылаются на файл "_main.scss", где нету описания такого класса.
Дело в том, что gulp-sourcemaps не поддерживает плагин gulp-group-css-media-queries. Решается довольно просто: https://toster.ru/q/405218#comment_1540527


P.S., благодарю за крутую сборку. Сделал себе форк с использованием nunjucks вместо pug'a.

SmarGrid

Как то не правильно создается scss файл для smardGrid'a
image

Когда генерируется файл то переменная объявляется ниже где она используется из-за этого вылазят ошибки. Либо я что то недопонимаю, либо ошибка

bem create block

Установил,обновил все зависимости, в консоли при вводе команды bem create blockname пишет что "bem" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

WebP поддержка в HTML

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

Плагины для views:
gulp-webp-html - выполняет замену. (есть недочеты в плагине, для их исправления можно подключить доп плагины)
gulp-html-prettify - вызывать до gulp-webp-html (для обработки инлайновых элементов)
gulp-htmlmin - для исправления структуры документа после gulp-webp-html (production)

Проверено - работает.

Автоматические поднятие инклудов в файлах scss при загрузке в репозиторий

Столкнулся с такой проблемой, что при отправке коммита в репозиторий происходит поднятие инклудов в файлах .scss.
Если не отправлять изменения в репозиторий, то весь код файла остается на своем месте. Проверил данную проблему при запуске gulp, но код так же без изменений.
Проблема возникает только при отправке изменений в репозиторий (работаю через VS Code, консолью не пользуюсь).
Код уже отправленный в репозиторий:
image
Код не отправленный в репозиторий:
image

Не запускается сервер

Все установилось, но при запуске (yarn run dev) все подгружается в консоли без ошибок, но сервер выдает ошибку - в названии вкладки написано error, на странице Cannot GET / - ну и соответственно страница не загружается.

В консоли браузерной вижу следующее:

Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-kLOQNAVOaBgADiUv3KS/St2g6k1exicli/nlGA4Ku2Y='), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback. - localhost/:7

Failed to load resource: the server responded with a status of 404 (Not Found) - localhost/:1

Как это лечить не совсем понимаю, помогите разобраться.

SVG Sprites

Как можно грамотно подключать svg спрайты к верстке? Можете рассказать пожалуйста!

[решение] как в browser-sync поменять браузер по умолчанию

Для того, чтобы иметь возможность указать, какой браузер будет вызван, нужно подкорректировать файл gulp-pug-starter/gulp-tasks/serve.js
к задаче

gulp.task("serve", () => {
    browsersync.init({
        server: "./dist/",
        port: 4000,
        notify: true
    });

добавить дополнительный параметр browser , чтобы получилось вот так

gulp.task("serve", () => {
    browsersync.init({
        server: "./dist/",
        port: 4000,
        notify: true,
        browser: "google-chrome-stable"
    });

где у МЕНЯ Google Chrome вызывается как google-chrome-stable

при подстановке google chrome или chrome получаем большой облом, нет такого браузера :(

Лечится это тривиально :)

  1. Находим ярлык Google Chrome
  2. Правой клавишей выши вызываем меню
  3. Выбираем пункт "Изменить Приложение"
  4. Смотрим, что указано в строке Комманда:
  5. Вот это и прописываем в конфиг

у меня Google Chrome прописан как google-chrome-stable
Теперь все как надо, вызывается Google Chrome и не придется постоянно переназначать браузер по умолчанию, как некоторые советуют. А можно сразу вызвать несколько, через массив ["opera", "vivaldi", "firefox"] откроются все сразу.

Всем удачи!

Vue остаётся в dev-режиме

в документации сказано что для вебпака4 достаточно указать :
mode: 'production'

и судя по всему при сборке скриптов эта опция выставляется для команды build, однако в консоли остаётся сообщение:
You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html

Не устанавливается Sharp

Из-за этой ошибки ни как не могу установить пакеты вашей сборки. Помогите. Использую macOS и node 14.

error /.../pug/node_modules/favicons/node_modules/sharp: Command failed.
Exit code: 1
Command: (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)
Arguments: 
Directory: /.../pug/node_modules/favicons/node_modules/sharp
Output:
info sharp Detected globally-installed libvips v8.10.6
info sharp Building from source via node-gyp
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info find Python using Python version 2.7.17 found at "/usr/local/opt/python@2/bin/python2.7"
gyp info spawn /usr/local/opt/python@2/bin/python2.7
gyp info spawn args [
gyp info spawn args   '/usr/local/Cellar/node@14/14.17.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/.../pug/node_modules/favicons/node_modules/sharp/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/Cellar/node@14/14.17.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/.../Library/Caches/node-gyp/14.17.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/.../Library/Caches/node-gyp/14.17.0',
gyp info spawn args   '-Dnode_gyp_dir=/usr/local/Cellar/node@14/14.17.0/lib/node_modules/npm/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/.../Library/Caches/node-gyp/14.17.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/.../pug/node_modules/favicons/node_modules/sharp',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.

gyp: No Xcode or CLT version detected!
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/Cellar/node@14/14.17.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:376:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Darwin 19.6.0
gyp ERR! command "/usr/local/Cellar/node@14/14.17.0/bin/node" "/usr/local/Cellar/node@14/14.17.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /.../pug/node_modules/favicons/node_modules/sharp

Компоненты

Здравствуйте! Не могу понять в чем концептуальное отличие между компонентами и блоками. Спасибо!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.