Π Π°Π·Π½ΠΎΠ΅

ΠŸΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€ js: Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€ для сайта ΠΈ спиннСр для ΠΊΠ½ΠΎΠΏΠΊΠΈ?

11.07.2023

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИспользованиС ΠΏΡ€Π΅-процСссоров | Vue Loader

Π’ webpack всС ΠΏΡ€Π΅-процСссоры Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. vue-loader позволяСт Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ webpack для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСкций Π² ΠΎΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Vue. Они Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° lang Ρƒ сСкции Ρ„Π°ΠΉΠ»Π°.

Sass

НапримСр, для компиляции нашСго Ρ‚Π΅Π³Π° <style> с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sass/SCSS:

Π’ вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ webpack:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ возмоТности ΠΏΠΈΡΠ°Ρ‚ΡŒ import 'style.scss', ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SCSS Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Vue:

Π›ΡŽΠ±ΠΎΠ΅ содСрТимоС Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ webpack, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π° *.scss.

Sass vs SCSS

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ sass-loader ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ синтаксис scss ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Π²Π°ΠΌ трСбуСтся синтаксис sass с отступами, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ:

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

sass-loader Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΡŽ additionalData, которая позволяСт Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΎ всС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π΅Π· нСобходимости Π²Π΅Π·Π΄Π΅ ΠΈΡ… явно ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

LESS

Stylus

PostCSS

Π‘ΠžΠ’Π•Π’

Vue Loader v15 большС Π½Π΅ примСняСт Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ PostCSS ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PostCSS Ρ‡Π΅Ρ€Π΅Π· postcss-loader.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ PostCSS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· postcss.config.js ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΈ postcss-loader. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ postcss-loader.

postcss-loader ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€Π΅-процСссорами, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅.

Babel

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Babel ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· .babelrc ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΈ babel-loader.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ node_modules

ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ exclude: /node_modules/ для ΠΏΡ€Π°Π²ΠΈΠ» транспиляции JS (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, babel-loader) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ .js. Из-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ вСрсии v15, Ссли Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ SFC Π²Π½ΡƒΡ‚Ρ€ΠΈ node_modules, Π΅Π³ΠΎ сСкция <script> Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ· транспиляции.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠΏΠΈΠ»ΡΡ†ΠΈΡŽ JS для ΠΎΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Vue Π² node_modules, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ для Π½ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠΏΡ†ΠΈΠΈ exclude:

TypeScript

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ TypeScript ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· tsconfig. json. Π’Π°ΠΊΠΆΠ΅ смотритС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ для ts-loader.

Pug

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° шаблонов нСсколько отличаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² webpack для шаблонов, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ pug-loader, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ шаблона вмСсто скомпилированной строки HTML. ВмСсто использования pug-loader ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΡΡ‹Ρ€ΡƒΡŽ строку HTML, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ pug-plain-loader:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Если Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ .pug ΠΊΠ°ΠΊ HTML-строки Π² JavaScript, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ raw-loader послС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅-процСссора. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ raw-loader сломаСт использованиС Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Vue, поэтому потрСбуСтся Π΄Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°: ΠΎΠ΄Π½ΠΎ для Ρ„Π°ΠΉΠ»ΠΎΠ² Vue с использованиСм resourceQuery, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ (fallback) для ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈΠ· JavaScript:

Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… | Electron

Π­Ρ‚ΠΎ руководство ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Ρ‚ вас Ρ‡Π΅Ρ€Π΅Π· процСсс создания простого Hello World прилоТСния Π² Electron, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° electron/electron-quick-start.

К ΠΊΠΎΠ½Ρ†Ρƒ этого ΡƒΡ€ΠΎΠΊΠ° вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, отобраТая Π²Π΅Π±-страницу с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии Chromium.js Node ΠΈ Electron Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

ВрСбования​

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Electron Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Node.js. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π’Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послСднюю Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ LTS Π²Π΅Ρ€ΡΠΈΡŽ.

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, установитС Node.js с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ собранных установщиков для вашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ совмСстимости.

Π§Ρ‚ΠΎΠ±Ρ‹ убСдится Ρ‡Ρ‚ΠΎ Node.js Π±Ρ‹Π» установлСн ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

node -v
npm -v

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вывСсти вСрсии Node.js ΠΈ npm соотвСтствСнно.

Note:Π’Π°ΠΊ ΠΊΠ°ΠΊ Electron встраиваСт Node.js Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, выполняСмая вСрсия Node.js ΠΌΠΎΠΆΠ΅Ρ‚ отличатся.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прилоТСния​

Π‘Π±ΠΎΡ€ΠΊΠ° прилоТСния​

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Electron ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Ρ‰ΡƒΡŽ структуру, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Node.js. НачнитС с создания ΠΏΠ°ΠΏΠΊΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° npm.

  • npm
  • Yarn
  • pnpm
mkdir my-electron-app && cd my-electron-app
npm init

Команда init запросит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния для Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ этом Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ стоит ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ entry point Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ main.js.
  • Поля author ΠΈ description ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для создания ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Π’Π°Ρˆ package.json Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

{
"name": "my-electron-app",
"version": "1.0.0",
"description": "Hello World!",
"main": "main.js",
"author": "Jane Doe",
"license": "MIT"
}

Π”Π°Π»Π΅Π΅ установитС ΠΏΠ°ΠΊΠ΅Ρ‚ electron ΠΊΠ°ΠΊ devDependencies.

  • npm
  • Yarn
  • pnpm
npm install --save-dev electron

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с установкой Electron, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ руководству Advanced Installation.

НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ стал Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ запуск прилоТСния, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ start Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ scripts Ρ„Π°ΠΉΠ»Π° package.json, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:

{
"scripts": {
"start": "electron ."
}
}

Π­Ρ‚Π° start ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

  • npm
  • Yarn
  • pnpm
npm start

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. На этом шагС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ошибка, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для запуска.

Запуск main process​

Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ для любого прилоТСния Π½Π° Electron являСтся скрипт main. Π­Ρ‚ΠΎΡ‚ скрипт управляСт основным процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся Π² ΠΏΠΎΠ»Π½ΠΎΠΉ срСдС Node. js ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° вашСго прилоТСния, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ основного интСрфСйса, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссом Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅).

Π’ процСссС выполнСния, Electron Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ этот скрипт Π² основном ΠΏΠΎΠ»Π΅ вашСго package.json ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ сконфигурировали Π² процСссС формирования ΠΊΠΎΠ΄Π° прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основной скрипт, создайтС пустой Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ main.js Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ снова запуститС скрипт запуска Π½Π° этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок! Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π² main.js.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-страницы​

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ для нашСго прилоТСния, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π² Π½Π΅Π³ΠΎ. In Electron, each window displays web contents that can be loaded from either a local HTML file or a remote URL.

Π’ этом Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ index.html Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
<h2>Hello World!</h2>
We are using Node.js <span></span>,
Chromium <span></span>,
and Electron <span></span>.
</body>
</html>

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π² Π½Π° этот HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вСрсии Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅ body. ΠœΡ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ вставим ΠΈΡ… ΠΏΠΎΠ·ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π΅Π±-страницы Π² ΠΎΠΊΠ½Π΅ браузСра​

Now that you have a web page, load it into an application window. To do so, you’ll need two Electron modules:

  • The app module, which controls your application’s event lifecycle.
  • The BrowserWindow module, which creates and manages application windows.

Because the main process runs Node.js, you can import these as CommonJS modules at the top of your file:

const { app, BrowserWindow } = require('electron')

Then, add a createWindow() function that loads index.html into a new BrowserWindow instance.

const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600
})

win.loadFile('index.html')
}

Next, call this createWindow() function to open your window.

In Electron, browser windows can only be created after the app module’s ready event is fired. You can wait for this event by using the app.whenReady() API. Call createWindow() after whenReady() resolves its Promise.

app.whenReady().then(() => {
createWindow()
})

Note: At this point, your Electron application should successfully open a window that displays your web page!

Manage your window’s lifecycle​

Although you can now open a browser window, you’ll need some additional boilerplate code to make it feel more native to each platform. Application windows behave differently on each OS, and Electron puts the responsibility on developers to implement these conventions in their app.

In general, you can use the process global’s platform attribute to run code specifically for certain operating systems.

Quit the app when all windows are closed (Windows & Linux)​

On Windows and Linux, exiting all windows generally quits an application entirely.

To implement this, listen for the app module’s 'window-all-closed' event, and call app.quit() if the user is not on macOS (darwin).

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})
Open a window if none are open (macOS)​

Whereas Linux and Windows apps quit when they have no windows open, macOS apps generally continue running even without any windows open, and activating the app when no windows are available should open a new one.

To implement this feature, listen for the app module’s activate event, and call your existing createWindow() method if no browser windows are open.

Because windows cannot be created before the ready event, you should only listen for activate events after your app is initialized. Do this by attaching your event listener from within your existing whenReady() callback.

app.whenReady().then(() => {
createWindow()

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})

Note: At this point, your window controls should be fully functional!

Access Node.js from the renderer with a preload script​

Now, the last thing to do is print out the version numbers for Electron and its dependencies onto your web page.

Accessing this information is trivial to do in the main process through Node’s global process object. However, you can’t just edit the DOM from the main process because it has no access to the renderer’s document context. They’re in entirely different processes!

Note: If you need a more in-depth look at Electron processes, see the Process Model document.

This is where attaching a preload script to your renderer comes in handy. A preload script runs before the renderer process is loaded, and has access to both renderer globals (e.g. window and document) and a Node.js environment.

Create a new script named preload.js as such:

window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}

for (const dependency of ['chrome', 'node', 'electron']) {
replaceText(`${dependency}-version`, process.versions[dependency])
}
})

The above code accesses the Node. js process.versions object and runs a basic replaceText helper function to insert the version numbers into the HTML document.

To attach this script to your renderer process, pass in the path to your preload script to the webPreferences.preload option in your existing BrowserWindow constructor.

// include the Node.js 'path' module at the top of your file
const path = require('path')

// modify your existing createWindow() function
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})

win.loadFile('index.html')
}
// ...

There are two Node.js concepts that are used here:

  • The __dirname string points to the path of the currently executing script (in this case, your project’s root folder).
  • The path.join API joins multiple path segments together, creating a combined path string that works across all platforms.

We use a path relative to the currently executing JavaScript file so that your relative path will work in both development and packaged mode.

Bonus: Add functionality to your web contents​

At this point, you might be wondering how to add more functionality to your application.

For any interactions with your web contents, you want to add scripts to your renderer process. Because the renderer runs in a normal web environment, you can add a <script> tag right before your index.html file’s closing </body> tag to include any arbitrary scripts you want:

<script src="./renderer.js"></script>

The code contained in renderer.js can then use the same JavaScript APIs and tooling you use for typical front-end development, such as using webpack to bundle and minify your code or React to manage your user interfaces.

Recap​

After following the above steps, you should have a fully functional Electron application that looks like this:

The full code is available below:

// main. js

// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})

// and load the index.html of the app.
mainWindow.loadFile('index.html')

// Open the DevTools.
// mainWindow.webContents.openDevTools()
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// НСкоторыС интСрфСйсы API ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС возникновСния этого события.

app.whenReady().then(() => {
createWindow()

app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {

if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ require.

// preload.js

// All the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}

for (const dependency of ['chrome', 'node', 'electron']) {
replaceText(`${dependency}-version`, process.

versions[dependency])
}
})

<!--index.html-->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
<h2>Hello World!</h2>
We are using Node.js <span></span>,
Chromium <span></span>,
and Electron <span></span>.

<!-- You can also require other files to run in this process -->

<script src="./renderer.js"></script>
</body>
</html>

  • main.js
  • preload.js
  • index. html
const { app, BrowserWindow } = require('electron')
const path = require('path')

function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {

preload: path.join(__dirname, 'preload.js')
}
})

win.loadFile('index.html')
}

app.whenReady().then(() => {
createWindow()

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})

To summarize all the steps we’ve done:

  • We bootstrapped a Node.js application and added Electron as a dependency.

  • We created a main.js script that runs our main process, which controls our app and runs in a Node.js environment. In this script, we used Electron’s app

    and BrowserWindow modules to create a browser window that displays web content in a separate process (the renderer).

  • In order to access certain Node.js functionality in the renderer, we attached a preload script to our BrowserWindow constructor.

Package and distribute your application​

The fastest way to distribute your newly created app is using Electron Forge.

  1. Add Electron Forge as a development dependency of your app, and use its import command to set up Forge’s scaffolding:

    • npm
    • Yarn
    • pnpm
    npm install --save-dev @electron-forge/cli
    npx electron-forge import

    βœ” Checking your system
    βœ” Initializing Git Repository
    βœ” Writing modified package.json file
    βœ” Installing dependencies
    βœ” Writing modified package.json file
    βœ” Fixing .gitignore

    We have ATTEMPTED to convert your app to be in a format that electron-forge understands.

    Бпасибо за использованиС "electron-forge"!!!

  2. Create a distributable using Forge’s make command:

    • npm
    • Yarn
    • pnpm
    npm run make

    > [email protected] make /my-electron-app
    > electron-forge make

    βœ” Checking your system
    βœ” Resolving Forge Config
    We need to package your application before we can make it
    βœ” Preparing to Package Application for arch: x64
    βœ” Preparing native dependencies
    βœ” Packaging Application
    Making for the following targets: zip
    βœ” Making for target: zip - On platform: darwin - For arch: x64

    Electron Forge creates the out folder where your package will be located:

    // Example for macOS
    out/
    β”œβ”€β”€ out/make/zip/darwin/x64/my-electron-app-darwin-x64-1. 0.0.zip
    β”œβ”€β”€ ...
    └── out/my-electron-app-darwin-x64/my-electron-app.app/Contents/MacOS/my-electron-app

jquery — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Javascript Π² качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° для HTML-страницы

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопрос

спросил

ИзмСнСно 5 Π»Π΅Ρ‚, 7 мСсяцСв Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ 23 тысячи Ρ€Π°Π·

Π― Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ javascript (Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ javascript) Π² качСствС ΠΏΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€Π° для Π²Π΅Π±-сайта для ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого: http://soulwire.github.io/Plasmatic-Isosurface/

Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ сначала ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° элСмСнты ΠΌΠΎΠ΅ΠΉ страницы Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, Π° послС этого Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ страницу

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ это?

Бпасибо

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° HTML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°

 

<Π³ΠΎΠ»ΠΎΠ²Π°>
  <ΠΌΠ΅Ρ‚Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°="UTF-8">
ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ JavaScript css"> <Ρ‚Π΅Π»ΠΎ> <Π΄Π΅Π»> <холст> <скрипт src="js/index.js"> бСзопасный

**Π˜Π—ΠœΠ•ΠΠ˜Π’Π¬ ΠšΠžΠ” Π˜Π—Π’Π˜ΠΠ•ΠΠ˜Π―

 

<Π³ΠΎΠ»ΠΎΠ²Π°>
  <ΠΌΠ΅Ρ‚Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°="UTF-8">
  ВСстированиС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°
       <ΡΡ‚ΠΈΠ»ΡŒ>
      .preloader{
          ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: фиксированноС;
          свСрху: 0;
          слСва: 0;
          ΡˆΠΈΡ€ΠΈΠ½Π°: 100vw;
          высота: 100Π²Ρ…;
          z-индСкс: 1000;
      }
      
<Ρ‚Π΅Π»ΠΎ> <холст> <скрипт src="js/index.js"> бСзопасный <скрипт> //послС ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΊΠ½Π° window.onload = функция () { //скрываСм ΠΏΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€ document.querySelector(".preloader").style.display = "Π½Π΅Ρ‚"; }
  • javascript
  • jquery
  • html
2

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

И ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Π±-страница ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ загрузится, Π²Ρ‹ просто скроСтС Π΅Π΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

 

<Π³ΠΎΠ»ΠΎΠ²Π°>
  <ΠΌΠ΅Ρ‚Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°="UTF-8">
  ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ JavaScript



      
      <ΡΡ‚ΠΈΠ»ΡŒ>
      /*Π‘Ρ‚ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°*/
      .preloader{
          /*
          Π”Π΅Π»Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΌ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами.
          ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π²ΠΈΠ΄Π΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
          */
          ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: фиксированноС;
          свСрху: 0;
          слСва: 0;
          ΡˆΠΈΡ€ΠΈΠ½Π°: 100vw;
          высота: 100Π²Ρ…;
          z-индСкс: 1000;
      }
      




<Ρ‚Π΅Π»ΠΎ>
    
<холст> <скрипт src="js/index.js"> бСзопасный <скрипт> //послС ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΊΠ½Π° window.onload = функция () { //скрываСм ΠΏΡ€Π΅Π»ΠΎΠ°Π΄Π΅Ρ€ document. querySelector(".preloader").style.display = "Π½Π΅Ρ‚"; }

Бпасибо

6

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, Π² ΠΎΠ΄ΠΈΠ½ div с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для вашСго ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, β€” Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π”Π°ΠΉΡ‚Π΅ свой ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ 9ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 0049: Π½Π΅Ρ‚ Π² вашСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ стилСй. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ window.onload для измСнСния стилСй document.getElementbyId().style.display = none/inline

1

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Facebook

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

НаТимая Β«ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свой ΠΎΡ‚Π²Π΅Ρ‚Β», Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с нашими условиями обслуТивания ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈ поняли Π½Π°ΡˆΡƒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ кодСкс повСдСния.

ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² | webpack

Webpack позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ статичСскиС рСсурсы, выходящиС Π·Π° Ρ€Π°ΠΌΠΊΠΈ JavaScript. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свои собствСнныС Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Node.js.

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с использованиСм ΠΈΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ! ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΡ‹ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… require() ΠΈΠ»ΠΈ автоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вашСго Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅Ρ‚Π° β€” см. ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.

Π€Π°ΠΉΠ»Ρ‹

  • val-loader ВыполняСт ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ рассматриваСт экспорт ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ JS
  • ref-loader Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

JSON 900 93

  • cson-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ транспортируСт Π€Π°ΠΉΠ» CSON

Вранспиляция

  • babel-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ ES2015+ ΠΈ транспилируСт Π² ES5 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Babel
  • esbuild-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ ES2015+ ΠΈ транспилируСтся Π² ES6+ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ esbuild
  • buble-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ ES2015+ ΠΈ транспилируСт Π² ES5 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BublΓ©
  • traceur-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ ES2015+ ΠΈ транспилируСт Π² ES5 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Traceur
  • ts -loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ TypeScript 2. 0+, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ JavaScript
  • coffee- loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ CoffeeScript ΠΊΠ°ΠΊ JavaScript
  • fengari-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ Lua с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fengari
  • elm-webpack-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Elm ΠΊΠ°ΠΊ JavaScript

Π¨Π°Π±Π»ΠΎΠ½Ρ‹

  • html-loader ЭкспортируСт HTML ΠΊΠ°ΠΊ строку, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ссылки Π½Π° статичСскиС рСсурсы
  • pug-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Pug ΠΈ Jade ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
  • markdown-loader 900 50 ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Markdown Π² HTML
  • react-markdown-loader ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Markdown Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ React с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° markdown-parse
  • posthtml-loader Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» HTML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PostHTML
  • handlebars-loader ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Handlebars Π² HTML
  • markup-inline-loader ВстроСнныС Ρ„Π°ΠΉΠ»Ρ‹ SVG/MathML Π² HTML. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π·Π½Π°Ρ‡ΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ CSS ΠΊ SVG.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *