Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

nicothin/NTH-start-project

Repository files navigation

Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с gulp Test Status devDependencies Status dependencies Status

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°

  • ИмСнованиС классов ΠΏΠΎ Π‘Π­Πœ, Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Π²Β pug, стилизация Sass. Π‘ΠΌ. ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с CSS-прСпроцСссорами ΠΈΒ Π‘Π­Πœ.
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π‘Π­Πœ-Π±Π»ΠΎΠΊ в своСй ΠΏΠ°ΠΏΠΊΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ src/blocks/. ИмСна Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Β Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с имСнСм Π±Π»ΠΎΠΊΠ°. Π‘ΠΌ. Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΎ Π‘Π»ΠΎΠΊΠΈ.
  • Π•ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ в сборку Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ Π±Π»ΠΎΠΊΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€ΠΈΒ config.js.
  • МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹:
    • src/js/script.js β€” ΠΎΠ±Ρ‰ΠΈΠΉ js, бСрётся Π² сборку ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ,
    • src/scss/print.scss β€” стили ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, Π½Π΅ бСрутся Π² сборку ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. config.js).
  • Бписок pug-примСсСй src/pug/mixins.pug гСнСрируСтся автоматичСски и содСрТит include ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… pug-Ρ„Π°ΠΉΠ»ΠΎΠ² всСх блоков.
  • ДиспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ стилСй src/scss/style.scss гСнСрируСтся автоматичСски и содСрТит ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ стилСвых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Π΄ΠΎΠΏ. Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² config.js.
  • Входная Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ js (src/js/entry.js) гСнСрируСтся автоматичСски и содСрТит require js-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΒ Π΄ΠΎΠΏ. Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² config.js.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄Π³Π°ΠΉΠ΄ (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Тёсткий), Π΅Π³ΠΎΒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° дСлаСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ ΠΈΠ»ΠΈΒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (npm run test), ошибки выводятся Π²Β Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π».
  • Π•ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ быстрого создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°: node createBlock.js new-block (создаёт ΠΏΠ°ΠΏΠΊΠΈ ΠΈ scss-Ρ„Π°ΠΉΠ»). ПослС ΠΈΠΌΠ΅Π½ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Установка

Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ установлСнный git ΠΈ Node.js (LTS).

  1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: git clone https://github.com/nicothin/NTH-start-project.git my-new-project (Π³Π΄Π΅ my-new-project β€” ΠΏΠ°ΠΏΠΊΠ° для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°).
  2. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” cd my-new-project).
  3. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: rm -rf .git
  4. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: npm i (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎ, особСнно Π½Π° Windows).

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

npm start          # запуск сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (сборка Π‘Π•Π— Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Π»ΠΎΠΊΠΎΠ²)
npm start deploy   # ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° содСрТимого ΠΏΠ°ΠΏΠΊΠΈ сборки Π½Π°Β gh-pages (Π½ΡƒΠΆΠ΅Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π°Β github.com)
npm run build      # сборка Π‘Π•Π— Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Π±Π΅Π· запуска сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
npm run wlib       # запуск сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (сборка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΎΠ²)
npm run test       # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всСх pug-, scss- ΠΈ js-Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° соотвСтствиС ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ (см. .pug-lintrc, .stylelintrc ΠΈΒ eslintrc соотвСтствСнно)
npm run test:pug   # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ pug-Ρ„Π°ΠΉΠ»Ρ‹
npm run test:style # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ scss-Ρ„Π°ΠΉΠ»Ρ‹
npm run test:js    # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ js-Ρ„Π°ΠΉΠ»Ρ‹

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

build/       # Папка сборки (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ)
src/         # Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ
  blocks/    # Π‘Π»ΠΎΠΊΠΈ (ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠΈ с Π±Π»ΠΎΠΊΠ°ΠΌΠΈ)
  favicon/   # Π€Π°Π²ΠΈΠΊΠΎΠ½ΠΊΠΈ (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² config.js)
  fonts/     # Π¨Ρ€ΠΈΡ„Ρ‚Ρ‹ (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² config.js, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² src/blocks/page/page.scss)
  img/       # ΠžΠ±Ρ‰ΠΈΠ΅ для всСх Π±Π»ΠΎΠΊΠΎΠ² изобраТСния (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² config.js)
  js/        # ΠžΠ±Ρ‰ΠΈΠ΅ js-Ρ„Π°ΠΉΠ»Ρ‹, Π² Ρ‚.Ρ‡. Ρ‚ΠΎΡ‡ΠΊΠ° сборки для webpack ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ
  pages/     # Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (ΠΏΡ€ΠΈ компиляции: src/pages/index.pug β†’ build/index.html)
  pug/       # Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ pug-Ρ„Π°ΠΉΠ»Ρ‹ (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ страниц, примСси)
  scss/      # Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ стилСвыС Ρ„Π°ΠΉΠ»Ρ‹ (диспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, примСси)

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΈ npm start запускаСтся дСфолтная Π·Π°Π΄Π°Ρ‡Π° gulp:

  1. ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ΡΡ ΠΏΠ°ΠΏΠΊΠ° сборки (build/).
  2. ЗаписываСтся Ρ„Π°ΠΉΠ» src/pug/mixins.pug с includ-Π°ΠΌΠΈ pug-Ρ„Π°ΠΉΠ»ΠΎΠ² всСх Π±Π»ΠΎΠΊΠΎΠ².
  3. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ страниц (ΠΈΠ· src/pages/**/*.pug Π² build/*.html).
  4. Из скомпилированных html-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ всС классы уровня Π‘Π­Πœ-Π±Π»ΠΎΠΊΠ°. На основании этого списка Π±ΡƒΠ΄ΡƒΡ‚ построСны диспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ стилСй и список всСх js-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  5. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ спрайты (Ссли Π±Π»ΠΎΠΊΠΈ спрайтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ), Π²Β ΠΏΠ°ΠΏΠΊΡƒ сборки ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΒ Π΄ΠΎΠΏ.Β Ρ„Π°ΠΉΠ»Ρ‹ из сСкции addAssets Ρ„Π°ΠΉΠ»Π° config.js.
  6. ЗаписываСтся диспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ стилСй src/scss/style.scss, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ:
    • Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· сСкции addStyleBefore Ρ„Π°ΠΉΠ»Π° config.js. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” SCSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ и примСси.
    • Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘Π­Πœ-Π±Π»ΠΎΠΊΠΎΠ², упомянутых в сСкции alwaysAddBlocks Ρ„Π°ΠΉΠ»Π° config.js. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ в сборку любой Π±Π»ΠΎΠΊ, Π΄Π°ΠΆΠ΅ Ссли Π΅Π³ΠΎΒ css-класс нС упоминаСтся Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ страниц.
    • Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘Π­Πœ-Π±Π»ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅.
    • Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² из сСкции addStyleAfter Ρ„Π°ΠΉΠ»Π° config.js.
  7. ЗаписываСтся входная Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ скриптов src/js/entry.js, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ:
    • require Ρ„Π°ΠΉΠ»ΠΎΠ² из сСкции addJsBefore Ρ„Π°ΠΉΠ»Π° config.js.
    • require Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘Π­Πœ-Π±Π»ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅.
    • require Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘Π­Πœ-Π±Π»ΠΎΠΊΠΎΠ², упомянутых в сСкции alwaysAddBlocks Ρ„Π°ΠΉΠ»Π° config.js.
    • require Ρ„Π°ΠΉΠ»ΠΎΠ² из сСкции addJsAfter Ρ„Π°ΠΉΠ»Π° config.js.
  8. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ диспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ стилСй (src/scss/style.scss). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ PostCSS.
  9. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ΡΡ входная Ρ‚ΠΎΡ‡ΠΊΠ° Javascript (src/js/entry.js). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Webpack.
  10. ЗапускаСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр и слСТСниС Π·Π°Β Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ для пСрСсборки.

Π‘Π»ΠΎΠΊΠΈ

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π»Π΅ΠΆΠΈΡ‚ Π²Β src/blocks/ в своСй ΠΏΠ°ΠΏΠΊΠ΅.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ содСрТимоС Π±Π»ΠΎΠΊΠ°:

demo-block/        # Папка блока.
  img/             # Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ этим Π±Π»ΠΎΠΊΠΎΠΌ (ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΏΠΊΡƒ сборки).
  demo-block.pug   # Π Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° (pug-ΠΏΡ€ΠΈΠΌΠ΅ΡΡŒ, ΠΎΡ‚Π΄Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ этого Π±Π»ΠΎΠΊΠ°, описаниС API примСси).
  demo-block.scss  # Π‘Ρ‚ΠΈΠ»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» этого Π±Π»ΠΎΠΊΠ° (Π±Π΅Π· стилСй Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ²).
  demo-block.js    # js-Ρ„Π°ΠΉΠ» Π±Π»ΠΎΠΊΠ° (Π±Π΅Π· скриптов Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ²).
  readme.md        # ОписаниС для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, подсказки.

ΠžΡΠΎΠ±Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ page

На Ρ‚Π΅Π³Π΅ <html> ΠΏΠΎΒ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ прописан класс page, Ρ‡Ρ‚ΠΎΒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Β«Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΒ». Π’ стилях этого Π±Π»ΠΎΠΊΠ° ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ:

  • ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сторонних ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²,
  • смСна боксовой ΠΌΠΎΠ΄Π΅Π»ΠΈ,
  • cΡ‚ΠΈΠ»ΠΈ шаблона (см. src/pug/layout.pug),
  • стилизация Ρ‚Π΅Π³ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π°Π½Π°Π»ΠΎΠ³ Normalize.CSS).

УдобноС созданиС нового блока

# Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: node createBlock.js Π˜ΠœΠ―Π‘Π›ΠžΠšΠ [Π΄ΠΎΠΏ. Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»]
node createBlock.js demo-block        # создаст ΠΏΠ°ΠΏΠΊΡƒ Π±Π»ΠΎΠΊΠ°, demo-block.scss, ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΡƒ img/ для этого Π±Π»ΠΎΠΊΠ°
node createBlock.js demo-block pug js # создаст ΠΏΠ°ΠΏΠΊΡƒ Π±Π»ΠΎΠΊΠ°, demo-block.scss, demo-block.pug, demo-block.js, ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΡƒ img/ для этого Π±Π»ΠΎΠΊΠ°

Если Π±Π»ΠΎΠΊ уТС сущСствуСт, Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅Β Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‚Ρ‘Ρ€Ρ‚Ρ‹, но создадутся Ρ‚Π΅Β Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅Β ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚.

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ npm-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

Если Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π² сборку сторонний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ послС Π΅Π³ΠΎ установки (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ β€” npm i package-name) Π½ΡƒΠΆΠ½ΠΎ:

  1. ΠŸΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ require Π² js-Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (Ρ‚Π°ΠΌ ΠΆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ касаСтся Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ). Если сторонний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½ΡƒΠΆΠ΅Π½ бСз привязки ΠΊΒ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ, ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ require Π²Β src/js/script.js (см.Β ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Β Ρ„Π°ΠΉΠ»Π΅).
  2. Если Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ в сборку стилСвыС Ρ„Π°ΠΉΠ»Ρ‹ модуля, ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ их в сСкции addStyleBefore Ρ„Π°ΠΉΠ»Π°Β config.js (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Β Ρ„Π°ΠΉΠ»Π΅).
  3. Если Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ в сборку Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ модуля, ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π²Β addAssets Ρ„Π°ΠΉΠ»Π° config.js с указаниСм Π²Β ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈΡ…Β ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Β Ρ„Π°ΠΉΠ»Π΅).

Π Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ pug.

ВсС страницы (см.Β src/pages/index.pug) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ шаблонов ΠΈΠ·Β src/pug (см. наслСдованиС шаблонов), в страницах описываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ содСрТимоС «шапки», Β«ΠΏΠΎΠ΄Π²Π°Π»Π°Β» ΠΈΒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π½ΠΎΠΉ области (см.Β Π±Π»ΠΎΠΊΠΈ).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ (Π²Β src/blocks/) ΠΌΠΎΠΆΠ΅Ρ‚ (нС обязан) ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ pug-Ρ„Π°ΠΉΠ» с одноимСнной ΠΏΡ€ΠΈΠΌΠ΅ΡΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ стартС сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ взят includ-ΠΎΠΌ Π²Β Ρ„Π°ΠΉΠ» src/pug/mixins.pug.

Π‘Ρ‚ΠΈΠ»ΠΈ

ДиспСтчСр ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (src/scss/style.scss) формируСтся автоматичСски при стартС сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ (Π²Β src/blocks/) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ scss-Ρ„Π°ΠΉΠ» со стилями этого Π±Π»ΠΎΠΊΠ°. Если Π±Π»ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ (ΠΈΠ»ΠΈ упомянут Π² config.js#alwaysAddBlocks), Π΅Π³ΠΎΒ scss-Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ взят в сборку стилСй.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ постпроцСссинг:

  1. autoprefixer
  2. css-mqpacker
  3. postcss-import
  4. postcss-inline-svg

Π‘Ρ‚ΠΈΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄-Π³Π°ΠΉΠ΄

АвтопровСрка с stylelint ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ. Π‘ΠΌ. .stylelintrc.

  1. Π‘Π­Πœ-ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅: __ β€” Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ элСмСнта, -- β€” Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.
  2. Один Π‘Π»ΠΎΠΊ = ΠΎΠ΄ΠΈΠ½ стилСвой Ρ„Π°ΠΉΠ».
  3. ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΡΡ‚ΡŒ сСлСкторов:
    • Π˜Π½ΠΊΠ»ΡƒΠ΄Ρ‹ примСсСй
    • Π‘Ρ‚ΠΈΠ»Π΅Π²Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° сущности
    • ΠœΠ΅Π΄ΠΈΠ°ΡƒΡΠ»ΠΎΠ²ΠΈΡ
    • ΠŸΡΠ΅Π²Π΄ΠΎΡΠ΅Π»Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ псСвдоэлСмСнты
    • Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ сСлСкторы
    • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π»ΠΎΠΊΠ°
    • ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±Π»ΠΎΠΊΠ°

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° (src/js/entry.js) формируСтся автоматичСски при стартС сСрвСра Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° обрабатываСтся webpack-ΠΎΠΌ (с babel-loader).

Для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… дСйствий прСдусмотрСн src/js/script.js (см.Β config.js#addJsAfter ΠΈΒ config.js#addJsBefore).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ (Π²Β src/blocks/) ΠΌΠΎΠΆΠ΅Ρ‚ (Π½Π΅ обязан) ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ js-Ρ„Π°ΠΉΠ». Если Π±Π»ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Β Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ (ΠΈΠ»ΠΈ упомянут Π² config.js#alwaysAddBlocks), Π΅Π³ΠΎΒ js-Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ взят в сборку стилСй.

Инлайн-скрипт

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² шаблонС (src/pug/layout.pug) прописана вставка Π²Β <head> скрипта src/js/head-script.js, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для узла <html> ΡƒΠΊΠ°Π·Π°Π½ΠΎ:

  • Π£Π±Ρ€Π°Ρ‚ΡŒ класс no-js ΠΈΒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ класс js.
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ класс с указаниСм названия Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈ ОБ.
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ класс touch ΠΈΠ»ΠΈ no-touch, в зависимости ΠΎΡ‚Β Ρ‚ΠΈΠΏΠ° интСрфСйса.
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ кастомноС свойство --vh со значСниСм Π²Β 1% высоты Π²ΡŒΡŽΠΏΠΎΡ€Ρ‚Π° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСрСсчитываСтся ΠΏΡ€ΠΈΒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²).

Нравится ΠΏΡ€ΠΎΠ΅ΠΊΡ‚?

Π‘Ρ‚Π°Π²ΡŒΡ‚Π΅ Π·Π²Π΅Π·Π΄Ρƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ/ΠΈΠ»ΠΈ угоститС мСня ΠΊΠΎΡ„Π΅, пСрСвСдя сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ сумму.