ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² | 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’sapp
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.
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 .gitignoreWe have ATTEMPTED to convert your app to be in a format that electron-forge understands.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "electron-forge"!!!
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: x64Electron 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
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠ΅Π»ΠΎΠ°Π΄Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
<Π³ΠΎΠ»ΠΎΠ²Π°> <ΠΌΠ΅ΡΠ°-ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°="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
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ 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.