Skip to content
This repository was 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% высоты Π²ΡŒΡŽΠΏΠΎΡ€Ρ‚Π° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСрСсчитываСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²).

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

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