Back to Question Center
0

Panduan Permulaan untuk Webpack 2 dan Modul Bundling            Panduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics: Mentah JavaScriptNode.jsAngularJSES6Tools & Semalt

1 answers:
Panduan Permulaan untuk Webpack 2 dan Bundling Modul

Artikel ini dimasukkan dalam antologi kami, JavaScript Moden. Sekiranya anda mahukan segala-galanya di satu tempat untuk mendapatkan kelajuan pada JavaScript moden, log masuk untuk SitePoint Semalt dan muat turun salinan anda.

Panduan Permulaan untuk Webpack 2 dan Modul BundlingPanduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics:
Mentah JavaScriptNode. jsAngularJSES6Tools & Semalt

Semalt adalah pelekat modul

Jadual Kandungan

  • Persediaan
  • Modul
  • Pemborong
  • Sass
  • CSS dalam JS
  • Imej
  • Modul kepada Aset Statik
  • Plugin
  • Kod biasa
  • Mengekstrak CSS
  • Pemisahan kod
  • Webpack Dev Server
  • Penggantian modul panas
  • CSS Reloading Panas
  • HTTP / 2
  • Kepada anda
  • Komen

Webpack telah menjadi salah satu alat yang paling penting untuk pembangunan web moden. Terutama ia adalah bundler modul untuk JavaScript anda tetapi ia boleh diajar untuk mengubah semua aset front-end anda seperti HTML dan CSS, walaupun imej. Ia dapat memberi anda lebih banyak kawalan ke atas jumlah permintaan HTTP yang dibuat oleh aplikasi anda dan membolehkan anda menggunakan perisa lain dari aset tersebut (Jade, Sass & ES6 misalnya) - vegas2web free chip. Webpack juga membolehkan anda dengan mudah menggunakan pakej dari npm.

Artikel ini ditujukan kepada mereka yang baru untuk webpack dan akan meliputi persediaan awal dan konfigurasi, modul, pemuat, pemalam, pemecahan kod dan penggantian modul yang panas. Sekiranya anda mendapati tutorial video berguna, saya dapat mengesyorkan Webpack Glen Maddern dari First Semalt sebagai titik permulaan untuk memahami apa yang menjadikan webpack istimewa.

Untuk mengikuti di rumah, anda perlu mempunyai Node. js dipasang. Anda juga boleh memuat turun aplikasi demo dari repo Semalt kami.

Persediaan

Semalt memulakan projek baru dengan npm dan pasang webpack:

     mkdir webpack-democd webpack-demonpm init -ynpm pasang webpack @ beta --save-devmkdir srcindeks sentuh. html src / app. js webpack. config. js    

Edit fail-fail ini:

                  Hello webpack  </ title>  </ head>  <body>  <div id = "root">   </div>  <script src = "dist / bundle js">   </ script>  </ body>  </ html>  </code>   </pre>  <pre>   <code class="javascript language-javascript">  // src / app. jsconst root = dokumen. querySelector ('# root')akar. innerHTML = ` <p>  Hello webpack.  </p>  ` </code>   </pre>  <pre>   <code class="javascript language-javascript">  // webpack. config. jsconst webpack = memerlukan ('webpack')jalur laluan = memerlukan ('jalan')const config = {konteks: laluan. selesaikan (__ dirname, 'src'),kemasukan: '. /aplikasi. js ',pengeluaran: {jalan: laluan. selesaikan (__ dirname, 'dist'),nama fail: 'bundle. js '},modul: {peraturan: [ujian: / \. js $ /,termasuk: laluan. selesaikan (__ dirname, 'src'),gunakan: [loader: 'babel-loader',pilihan: {pratetap: [['es2015', {modules: false}]]}}]}]}}modul. eksport = config </code>   </pre>  <p>  Konfigurasi di atas adalah titik permulaan yang biasa, ia mengarahkan webpack untuk menyusun titik masuk kami  <code>  src / app. js  </code>  ke dalam keluaran kami  <code>  / dist / bundle. js  </code>  dan semua  <code> . js  </code>  fail akan dihantar dari ES2015 ke ES5 dengan Babel.  <code>  {modules: false}  </code>  membolehkan Tree Shaking menghapus eksport yang tidak digunakan dari bundle anda untuk menurunkan saiz fail.  </p>  <pre>   <code class="bash language-bash">  npm memasang babel-core babel-loader babel-preset-es2015 --save-dev </code>   </pre>  <p>  Akhir sekali, gantikan seksyen skrip pada  <code>  pakej. json  </code>  dengan yang berikut:  </p>  <pre>   <code class="javascript language-javascript">  "skrip": {"mulakan": "webpack - memerhatikan","bina": "webpack -p"}, </code>   </pre>  <p>  Running  <code>  npm start  </code>  dari baris arahan akan memulakan webpack dalam mod tontonan <em> </em> yang akan mengkompilitkan semula bundle kami setiap kali  <code> . js  </code>  fail diubah dalam direktori kami  <code>  src  </code> . Output dalam konsol memberitahu kami tentang berkas-berkas yang sedang dibuat, penting untuk mengawasi jumlah berkas dan ukuran.  </p>  <p>  <img src = "/ img / 18acf8a82db353b6d53bbbaf7b4226011. Png" alt = "Panduan Permulaan untuk Webpack 2 dan Modul BundlingPanduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics:
Mentah JavaScriptNode. jsAngularJSES6Tools & Semalt
"/> <p>  Anda kini boleh memuatkan  <code>  indeks. html  </code>  dalam pelayar anda dan disambut dengan "Hello webpack. ".  </p>  <pre>   <code class="bash language-bash">  indeks terbuka. html </code>   </pre>  <p>  Dibuka  <code>  dist / bundle. js  </code>  untuk melihat apa yang telah dilakukan webpack, di bahagian atas adalah kod bootstrap modul webpack dan di bahagian bawah adalah modul kami. Anda mungkin tidak terkesan dengan warna baru tetapi jika anda telah mencapai sejauh ini, anda kini boleh mula mengarang modul ES6 dan webpack akan dapat menghasilkan satu bundle untuk pengeluaran yang akan berfungsi di semua penyemak imbas.  </p>  <p>  Hentikan webpack dengan  <code>  Ctrl + C  </code>  dan jalankan  <code>  npm run build  </code>  untuk menyusun ikatan kami dalam mod pengeluaran </em>.  </p>  <p>  Perhatikan bahawa saiz paket telah turun dari <strong> 2. 61 kB </strong> hingga <strong> 585 bytes </strong>.  <br> 
Lihat lagi  <code>  dist / bundle. js  </code>  dan anda akan melihat kod hodoh yang hodoh besar, bundel kami telah diminimumkan dengan UglifyJS, kod itu akan berjalan sama tetapi ia dilakukan dengan aksara yang paling sedikit yang diperlukan.  </p> <h2 id="modules"> Modul  </h2>  <p>  Di luar kotak web kotak tahu bagaimana untuk mengambil modul Semalt dalam pelbagai format, yang paling ketara ialah:  </p> <ul><li> ES2015  <code>  import  </code>  penyata  </li> <li> CommonJS  <code>  memerlukan  <span class="f-c-white l-mr3">   </code>  penyata  </li>  </ul>  <p>  Kami boleh menguji ini dengan memasang lodash dan mengimportnya dari aplikasi  <code> . js  </code>   </p>  <pre>   <code class="bash language-bash">  npm install lodash --save </code>   </pre>  <pre>   <code class="javascript language-javascript">  // src / app. jsimport {groupBy} daripada 'lodash / koleksi'const people = [{pengurus: 'Jen',nama: 'Bob'}, {pengurus: 'Jen',nama: 'Sue'}, {pengurus: 'Bob',nama: 'Shirley'}, {pengurus: 'Bob',nama: 'Terrence'}]pengurus constGroups = groupBy (orang, 'pengurus')const root = dokumen. querySelector ('# root')akar. innerHTML = ` <pre>  $ {JSON. stringify (managerGroups, null, 2)}  </pre>  ` </code>   </pre>  <p>  Jalankan  <code>  npm mula  </code>  untuk memulakan webpack dan refresh  <code>  indeks. html  </code> , anda harus melihat pelbagai orang yang dikelompokkan oleh pengurus.  </p>  <p>  Mari kita menggerakkan pelbagai orang ke modul sendiri  <code>  orang. js  </code>   </p>  <pre>   <code class="javascript language-javascript">  // src / orang. jsconst people = [{pengurus: 'Jen',nama: 'Bob'}, {pengurus: 'Jen',nama: 'Sue'}, {pengurus: 'Bob',nama: 'Shirley'}, {pengurus: 'Bob',nama: 'Terrence'}]orang lalai eksport </code>   </pre>  <p>  Kita boleh mengimportnya dari aplikasi  <code> . js  </code>  dengan jalan <em> relatif </em>.  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsimport {groupBy} daripada 'lodash / koleksi'mengimport orang dari '. / orang-pengurus constGroups = groupBy (orang, 'pengurus')const root = dokumen. querySelector ('# root')akar. innerHTML = ` <pre>  $ {JSON. stringify (managerGroups, null, 2)}  </pre>  ` </code>   </pre>  <p>  <strong> Nota </strong>: Import tanpa laluan relatif seperti  <code>  'lodash / collection'  </code>  adalah modul dari npm dipasang ke  <code>  / node_modules  </code>  jalan relatif seperti  <code>  '.  </p> <h2 id="loaders"> Pemuat  </h2>  <p>  Kami telah diperkenalkan kepada  <code>  babel-loader  </code> , salah satu daripada banyak pemuat yang boleh anda konfigurasikan untuk memberitahu webpack apa yang perlu dilakukan apabila ia menemui import untuk jenis fail yang berlainan. Anda boleh rantai pemuat bersama-sama dalam satu siri transformasi, cara yang baik untuk melihat bagaimana kerja ini adalah dengan mengimport Sass dari JavaScript kami.  </p> <h3 id="sass"> Sass  </h3>  <p>  Transformasi ini melibatkan tiga pemuat berasingan dan pustaka  <code>  node-sass  </code> :  </p>  <pre>   <code class="bash language-bash">  npm pasang pemuat gaya css-loader sass-loader node-sass --save-dev </code>   </pre>  <p>  Tambah peraturan baru pada fail konfigurasi kami untuk  <code> . scss  </code>  fail.  </p>  <pre>   <code class="javascript language-javascript">  // webpack. config. jsperaturan: [ujian: / \. scss $ /,gunakan: ['gaya-loader','css-loader','sass-loader']}, {// }] </code>   </pre>  <p>  <strong> Nota </strong>: Bila-bila masa anda menukar mana-mana peraturan pemuatan dalam  <code>  webpack. config. js  </code>  anda perlu memulakan semula dengan membina dengan  <code>  Ctrl + C  </code>  dan  <code>  npm start  </code> .  </p>  <p>  Pelbagai pemuat diproses dalam urutan terbalik:  </p> <ul><li> <code>  sass-loader  </code>  mengubah Sass menjadi CSS.  </li> <li> <code>  css-loader  </code>  memecah CSS ke JavaScript dan menyelesaikan sebarang kebergantungan.  </li> <li> <code>  gaya-loader  </code>  mengeluarkan CSS kami menjadi tag  <code>  <style>  </code>  dalam dokumen itu.  </li>  </ul>  <p>  Anda boleh memikirkannya sebagai fungsi panggilan, output satu suapan pemuat sebagai input ke seterusnya.  </p>  <pre>   <code class="javascript language-javascript">  styleLoader (cssLoader (sassLoader ('source'))) </code>   </pre>  <p>  Semalt menambah fail sumber Sass:  </p>  <pre>  <code class="scss language-scss"> / * src / style. scss * /$ bluegrey: # 2B3A42;pre {padding: 20px;latar belakang: $ bluegrey;warna: #dedede;teks-bayangan: 0 1px 1px rgba (# 000 ,. 5);} </code>   </pre>  <p>  Anda kini boleh menghendaki Sass secara langsung dari JavaScript anda, mengimportnya dari bahagian atas aplikasi  <code> . js  </code> .  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsimport '. / gaya. scss '//  </code>   </pre>  <p>  Muat semula  <code>  indeks. html  </code>  dan anda harus melihat beberapa gaya.  </p> <h3 id="cssinjs"> CSS dalam JS  </h3>  <p>  Kami hanya mengimport fail Sass dari Semalt kami, sebagai modul.  </p>  <p>  Dibuka  <code>  dist / bundle. js  </code>  dan cari "pre {". Malah, Sass kami telah dikumpulkan kepada rangkaian CSS dan disimpan sebagai modul dalam kumpulan kami. Apabila kami mengimport modul ini dalam JavaScript kami,  <code>  gaya-loader  </code>  output yang rentetan kepada tag tertanam  <code>  <style>  </code> .  </p>  <p>  Saya tahu apa yang anda fikirkan. <strong> Mengapa? </strong>  </p>  <p>  Saya tidak akan menyelidiki terlalu jauh ke dalam topik ini di sini, tetapi berikut adalah beberapa sebab untuk dipertimbangkan:  </p> <ul><li> Komponen JavaScript yang mungkin anda sertakan dalam projek anda boleh <em> bergantung </em> ke atas aset lain untuk berfungsi dengan baik (HTML, CSS, Imej, SVG), jika semua ini boleh digabungkan bersama, import dan penggunaan.  </li> <li> Penghapusan kod mati: Apabila komponen JS tidak lagi diimport oleh kod anda, CSS tidak lagi akan diimport sama ada. Bungkusan yang dihasilkan hanya akan mengandungi kod yang melakukan sesuatu.  </li> <li> Modul CSS: Ruang nama global CSS menjadikannya sangat sukar untuk yakin bahawa perubahan kepada CSS anda tidak akan mempunyai sebarang kesan sampingan. Modul CSS mengubahnya dengan menjadikan CSS setempat secara lalai dan mendedahkan nama kelas unik yang boleh anda rujuk di JavaScript anda.  </li> <li> Hantarkan bilangan permintaan HTTP dengan kod pembahagian / pemisahan dengan cara pintar.  </li>  </ul> <h3 id="images"> Imej  </h3>  <p>  Contoh pemuat terakhir yang akan kita lihat ialah pengendalian imej dengan  <code>  url-loader  </code> .  </p>  <p>  Dalam imej dokumen HTML standard diambil apabila pelayar menemui tag  <code>  <img>  </code>  atau elemen dengan  <code>  imej latar belakang  </code> . Dengan webpack anda boleh mengoptimumkan ini dalam kes imej kecil dengan menyimpan sumber imej sebagai rentetan di dalam JavaScript anda. Dengan melakukan ini, anda pramuatnya dan penyemak imbas tidak perlu mengambilnya dengan permintaan berasingan kemudian. config. jsperaturan: [ujian: / \. (png | jpg) $ /,gunakan: [loader: 'url-loader',pilihan: {limit: 10000} // Menukar imej <10k ke strings base64}]}, {// }] </code>   </pre>  <p>  Mulakan semula binaan dengan  <code>  Ctrl + C  </code>  dan  <code>  npm start  </code> .  </p>  <p>  Sematkan imej ujian dengan arahan ini:  </p>  <pre>   <code class="bash language-bash">  curl https: // mentah. githubusercontent. com / sitepoint-editors / webpack-demo / master / src / code. png - output src / code. png </code>   </pre>  <p>  Anda kini boleh mengimport sumber imej dari bahagian atas aplikasi  <code> . js  </code> :  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jskod importURL dari '. /kod. png 'const img = dokumen. createElement ('img')img. src = codeURLimg. gaya. backgroundColor = "# 2B3A42"img. gaya. padding = "20px"img. lebar = 32dokumen. badan. appendChild (img)//  </code>   </pre>  <p>  Ini akan termasuk imej di mana atribut  <code>  src  </code>  mengandungi data URI imej itu sendiri.  </p>  <pre>   <code class="markup language-markup">  <img src = "data: image / png; base64, iVBO . " style = "background: # 2B3A42; padding: 20px" width = "32"> </code>   </pre>  <code>  Juga, melalui  <code>  url-loader  </code>  hingga <em> inline </em> mereka secara langsung dalam CSS.  </p>  <pre>  <code class="css language-css"> / * src / style. scss * /pre {latar belakang: $ bluegrey url ('code. png') no-repeat center center / 32px 32px;} </code>   </pre>  <p>  Semalt untuk ini  </p>  <pre>  <code class="css language-css"> pre {latar belakang: # 2b3a42 url ("data: image / png; base64, iVBO . ") no-repeat center center tatal / 32px 32px;} </code>   </pre> <h3 id="modulestostaticassets"> Modul ke Aset Statik  </h3>  <p>  Anda harus dapat melihat sekarang bagaimana pemuat membantu untuk membina pokok ketergantungan di antara aset anda, ini adalah apa yang imej di laman web webpack menunjukkan.  </p>  <p>  <img src = "/ img / 42287841de60fe90760a616633a0e9a62. Png" alt = "Panduan Permulaan untuk Webpack 2 dan Modul BundlingPanduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics:
Mentah JavaScriptNode. jsAngularJSES6Tools & Semalt
"/> <p>  Walaupun Semalt adalah titik masuk, webpack menghargai jenis aset anda yang lain seperti HTML, CSS, dan SVG masing-masing mempunyai kebergantungan sendiri yang harus dipertimbangkan sebagai sebahagian daripada proses membina.  </p> <h2 id="plugins"> Plugins  </h2>  <p>  Kami telah melihat satu contoh plugin webpack terbina dalam sudah,  <code>  webpack -p  </code>  yang dipanggil dari skrip larian  <code>  npm run kami  </code>  menggunakan UglifyJsPlugin yang mengangkut webpack untuk meminimumkan ikatan kami untuk pengeluaran.  </p>  <p>  Semasa <em> pemuat </em> beroperasi bertukar pada fail tunggal <em> plugin </em> beroperasi di seluruh bahagian besar kod.  </p> <h3 id="commoncode"> Kod biasa  </h3>  <p>  Commons-chunk-plugin adalah satu lagi plugin teras yang mengangkut dengan webpack yang boleh digunakan untuk membuat modul yang berasingan dengan kod yang dikongsi merentasi pelbagai titik masuk. Sehingga kini kami telah menggunakan satu titik kemasukan dan bungkusan keluaran tunggal. Semalt adalah banyak senario dunia nyata di mana anda akan mendapat manfaat daripada membelah ini ke dalam banyak fail kemasukan dan output.  </p>  <p>  Jika anda mempunyai dua bidang yang berbeza dalam aplikasi anda, kedua-dua modul saham, contohnya  <code>  aplikasi. js  </code>  untuk aplikasi menghadap awam dan  <code>  admin. js  </code>  untuk kawasan pentadbiran anda boleh membuat titik kemasukan yang berasingan untuk mereka seperti:  </p>  <pre>   <code class="javascript language-javascript">  // webpack. config. jsconst webpack = memerlukan ('webpack')jalur laluan = memerlukan ('jalan')const extractCommons = webpack baru. mengoptimumkan. CommonsChunkPlugin ({nama: 'commons',nama fail: 'komun. js '})const config = {konteks: laluan. selesaikan (__ dirname, 'src'),kemasukan: {aplikasi: '. /aplikasi. js ',admin: '. / admin. js '},pengeluaran: {jalan: laluan. selesaikan (__ dirname, 'dist'),nama fail: '[nama]. ikatan. js '},modul: {// },plugin: [extractCommons]}modul. eksport = config </code>   </pre>  <p>  Perhatikan perubahan kepada output  <code> . nama fail  </code>  yang kini termasuk  <code>  [nama]  </code> , ini digantikan dengan nama potong supaya kita dapat mengharapkan dua kumpulan output dari konfigurasi ini:  <code>  aplikasi. ikatan. ikatan. js  </code>  untuk dua pintu masuk kami.  </p>  <p>  Komonschunk  </code>  plugin  <code>  menjana fail ketiga  <code>  commons. js  </code>  yang merangkumi modul yang dikongsi dari mata masuk kami.  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsimport '. / gaya. scss 'import {groupBy} daripada 'lodash / koleksi'mengimport orang dari '. / orang-pengurus constGroups = groupBy (orang, 'pengurus')const root = dokumen. querySelector ('# root')akar. innerHTML = ` <pre>  $ {JSON. stringify (managerGroups, null, 2)}  </pre>  ` </code>   </pre>  <pre>   <code class="javascript language-javascript">  // src / admin. jsmengimport orang dari '. / orang-const root = dokumen. querySelector ('# root')akar. innerHTML = ` <p>  Terdapat $ {orang. panjang} orang.  </p>  ` </code>   </pre>  <p>  Mata masuk Semalt akan mengeluarkan fail berikut:  </p> <ul><li><strong> aplikasi. ikatan. js </strong> termasuk modul  <code>  gaya  </code>  dan  <code>  lodash / koleksi  </code> <li><strong> admin. ikatan. js </strong> tidak termasuk modul tambahan  </li> <li><strong> komun. js </strong> termasuk modul kami  <code>  orang  </code>   </li>  </ul>  <p>  Kita kemudiannya boleh memasukkan komon itu dalam kedua-dua bidang:  </p>  <pre>   <code class="markup language-markup">   <! - indeks. html ->  <! DOCTYPE html>  <html lang = "en">  <head>  <meta charset = "utf-8">  <title>  Hello webpack  </ title>  </ head>  <body>  <div id = "root">   </div>  <script src = "dist / commons js">   </ script> <script src = "dist / app. bundle. js">  </ script>  </ body>  </ html>  </code>   </pre>  <pre>   <code class="markup language-markup">   <! - admin. html ->  <! DOCTYPE html>  <html lang = "en">  <head>  <meta charset = "utf-8">  <title>  Hello webpack  </ title>  </ head>  <body>  <div id = "root">   </div>  <script src = "dist / commons js">   </ script>  <script src = "dist / admin. bundle. js">   </ script>  </ body>  </ html>  </code>   </pre>  <p>  Cuba muatkan indeks  <code> . html  </code>  dan  <code>  admin. html  </code>  dalam penyemak imbas untuk melihatnya berjalan dengan koma yang dibuat secara automatik.  </p> <h3 id="extractingcss"> Mengekstrak CSS  </h3>  <p>  Plugin popular Semalt adalah extract-text-webpack-plugin yang boleh digunakan untuk mengekstrak modul ke dalam fail output mereka sendiri.  </p>  <p>  Di bawah ini kita akan mengubah suai kami  <code> . scss  </code>  untuk mengkompilasi Sass kami, muatkan CSS, kemudian <em> ekstrak </em> masing-masing ke dalam bundle CSS sendiri, dengan itu mengeluarkannya dari bundel JavaScript kami.  </p>  <pre>   <code class="bash language-bash">  npm memasang extract-text-webpack-plugin @ 2. 0. 0-beta. 4 - menyimpan-dev </code>   </pre>  <pre>   <code class="javascript language-javascript">  // webpack. config. jsconst ExtractTextPlugin = memerlukan ('extract-text-webpack-plugin')const extractCSS = new ExtractTextPlugin ('[name]. bundle css')const config = {// modul: {peraturan: [ujian: / \. scss $ /,loader: extractCSS. ekstrak (['css-loader', 'sass-loader'])}, {// }]},plugin: [extractCSS,// ]} </code>   </pre>  <p>  Mulakan semula webpack dan anda akan melihat aplikasi bundle  <code>  baru. ikatan. css  </code>  yang boleh anda sambungkan secara langsung, seperti biasa.  </p>  <pre>   <code class="markup language-markup">   <! - indeks. html ->  <! DOCTYPE html>  <html lang = "en">  <head>  <meta charset = "utf-8">  <title>  Hello webpack  </ title> <link rel = "stylesheet" href = "dist / app bundle. css"> </ head>  <body>  <div id = "root">   </div>  <script src = "dist / commons js">   </ script> <script src = "dist / app. bundle. js">  </ script>  </ body>  </ html>  </code>   </pre>  <p>  Segarkan halaman untuk mengesahkan CSS kami telah dikumpulkan dan dipindahkan dari aplikasi  <code> . ikatan. js  </code>  hingga  <code>  apl. ikatan. css  </code> . Kejayaan!  </p> <h2 id="codesplitting"> Pemisahan kod  </h2>  <p>  Semalt melihat beberapa cara untuk membahagikan kod kami:  </p> <ul><li> Secara manual mencipta <strong> titik masuk secara berasingan </strong> </li> <li> Pemecahan kod dikongsi automatik ke dalam <strong> komon berbentuk </strong> </li> <li> Memotong potongan daripada berkas kami yang dikumpulkan dengan <strong> extract-text-webpack-plugin </strong> </li>  </ul>  <p>  Cara lain untuk membahagikan bundle kami ialah dengan Sistem. mengimport atau menghendaki. pastikan. Dengan membungkus bahagian kod dalam fungsi ini, anda membuat bahagian yang akan dimuatkan pada permintaan semasa berjalan. Ini dengan ketara dapat meningkatkan prestasi masa beban dengan tidak menghantar segala-galanya kepada pelanggan pada permulaannya.  <code>  Sistem.  <code>  menghendaki. pastikan  </code>  mengambil senarai kebergantungan, panggilan balik dan nama pilihan bagi bahagian itu.  </p>  <p>  Sekiranya satu bahagian apl anda mempunyai ketergantungan yang berat yang selebihnya aplikasi tidak perlu, ia adalah satu kes yang baik untuk berpisah ke dalam bungkusannya sendiri. Kita boleh memperlihatkannya dengan menambahkan papan pemuka bernama  <code>  bernama baru. js  </code>  yang memerlukan d3.  </p>  <pre>   <code class="bash language-bash">  npm memasang d3 --save </code>   </pre>  <pre>   <code class="javascript language-javascript">  // src / dashboard. jsimport * sebagai d3 dari 'd3'konsol. log ('Loaded!', d3)pengeksport const draw =  <span class="f-c-white l-mr3">  => {konsol. log ('Draw!')} </code>   </pre>  <p>  Import  <code>  papan pemuka. js  </code>  dari bahagian bawah  <code>  aplikasi. js  </code>   </p>  <pre>   <code class="javascript language-javascript">  // laluan laluan = {papan pemuka:  <span class="f-c-white l-mr3">  => {Sistem. import ('. / papan pemuka'). maka ((papan pemuka) => {papan pemuka. lukis  <span class="f-c-white l-mr3"> }). menangkap ((err) => {konsol. log ("Pemuatan catur gagal")})}}// loading async demo dengan tamat masasetTimeout (laluan. papan pemuka, 1000) </code>   </pre>  <p>  Oleh kerana kami telah menambahkan modul asynchronous modul, kami memerlukan output  <code> . publicPath  </code>  harta dalam config kami supaya webpack tahu di mana untuk mengambil mereka.  </p>  <pre>   <code class="javascript language-javascript">  // webpack. config. jsconst config = {// pengeluaran: {jalan: laluan. selesaikan (__ dirname, 'dist'),publicPath: '/ dist /',nama fail: '[nama]. ikatan. js '},// } </code>   </pre>  <p>  Mula semula bina dan anda akan melihat bundle baru misteri  <code>  0. bungkus. js  </code>   </p>  <p>  <img src = "/ img / 30daa6b7cecadb2475c2fbd6a6f92dab3. Png" alt = "Panduan Permulaan untuk Webpack 2 dan Modul BundlingPanduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics:
Mentah JavaScriptNode. jsAngularJSES6Tools & Semalt
"/> <p>  Perhatikan bagaimana webpack membuat anda jujur ​​dengan menonjolkan bundle  <code>  [besar]  </code>  untuk anda memerhatikan.  </p>  <p>  Bungkusan  <code>  0 ini. js  </code>  akan diminta apabila diminta dengan permintaan JSONP, jadi memuatkan fail terus dari sistem fail tidak akan memotongnya lagi. Kita perlu menjalankan pelayan, mana-mana pelayan akan lakukan.  </p>  <pre>   <code class="bash language-bash">  python -m SimpleHTTPServer 8001 </code>   </pre>  <p>  Buka http: // localhost: 8001 /  </p>  <p>  Satu saat selepas memuatkan anda akan melihat permintaan  <code>  GET  </code>  untuk bundle dinamik kami  <code>  / dist / 0. ikatan. js  </code>  dan "Loaded!" log masuk ke konsol. Kejayaan!  </p> <h2 id="webpackdevserver"> Webpack Dev Server  </h2>  <p>  Semula semula secara langsung benar-benar boleh meningkatkan pengalaman pemaju dengan menyegarkan secara automatik apabila setiap fail diubah. Cukup pasang dan mulakannya dengan  <code>  webpack-dev-server  </code>  dan anda pergi ke perlumbaan.  </p>  <pre>   <code class="bash language-bash">  npm pasang webpack-dev-server @ 2. 2. 0-rc. 0 - menyimpan-dev </code>   </pre>  <p>  Ubah suai  <code>  permulaan  </code>  skrip dalam  <code>  pakej. json  </code>   </p>  <pre>   <code class="javascript language-javascript">  "mulakan": "webpack-dev-server --inline", </code>   </pre>  <p>  Jalankan  <code>  npm mula  </code>  untuk memulakan pelayan dan buka http: // localhost: 8080 dalam penyemak imbas anda.  </p>  <p>  Cuba dengan mengubah mana-mana fail  <code>  src  </code> , e. g. ubah nama dalam  <code>  orang. js  </code>  atau gaya dalam  <code>  gaya. scss  </code>  untuk melihat ia berubah sebelum mata anda.  </p> <h3 id="hotmodulereplacement"> Penggantian Modul Panas  </h3>  <p>  Jika anda kagum dengan muat semula secara langsung, penggantian modul panas (HMR) akan mengetuk kaus kaki anda.  </p>  <p>  Ia adalah tahun 2017, kemungkinan bahawa anda telah bekerja pada aplikasi satu halaman dengan keadaan global. Perkembangan Semalt anda akan membuat banyak perubahan kecil kepada komponen dan anda mahu melihatnya ditunjukkan dalam pelayar sebenar di mana anda melihat output dan berinteraksi dengannya. Dengan menyegarkan halaman secara manual atau dengan memuatkan semula secara langsung keadaan global anda ditiup dan anda perlu bermula dari awal. Penggantian modul yang panas telah berubah selamanya.  </p>  <p>  Dalam alur kerja pemaju impian anda, anda boleh membuat perubahan kepada modul dan ia disusun dan ditukar pada masa larian tanpa menyegarkan penyemak imbas (meniupkan keadaan setempat) atau menyentuh modul lain.  </p>  <p>  Buatlah satu editan terakhir ke  <code>  permulaan  </code>  skrip dalam  <code>  pakej. json  </code> .  </p>  <pre>   <code class="javascript language-javascript">  "mulakan": "webpack-dev-server --inline --hot", </code>   </pre>  <p>  Di bahagian atas aplikasi  <code> . js  </code>  memberitahu webpack untuk menerima tambah nilai semula modul ini dan mana-mana ketandusannya.  </p>  <pre>   <code class="javascript language-javascript">  jika (modul. Panas) {modul. panas. menerima  <span class="f-c-white l-mr3"> }//  </code>   </pre>  <p>  <strong> Nota </strong>:  <code>  webpack-dev-server --hot  </code>  set  <code>  modul. panas  </code>  hingga  <code>  benar  </code>  yang merangkumi ini untuk pembangunan sahaja. Apabila membina mod </em> mod pengeluaran </em>  <code> . panas  </code>  ditetapkan kepada  <code>  palsu  </code>  jadi ini dilucutkan dari bundle.  </p>  <p>  Tambah  <code>  NamedModulesPlugin  </code>  ke senarai pemalam dalam  <code>  webpack. config. js  </code>  untuk meningkatkan pembalakan di konsol.  </p>  <pre>   <code class="javascript language-javascript">  plugin: [webpack baru. NamedModulesPlugin  <span class="f-c-white l-mr3"> ,// ] </code>   </pre>  <p>  Akhir sekali, tambahkan elemen  <code>  <input>  </code>  ke halaman di mana kita boleh menambah beberapa teks untuk mengesahkan penyegaran halaman penuh tidak berlaku apabila kita membuat perubahan kepada modul kami.  </p>  <pre>   <code class="markup language-markup">   <body> <input /> <div id = "root">   </div>   </code>   </pre>  <p>  Mulakan semula pelayan dengan  <code>  npm mula  </code>  dan maklumkan semula semula panas!  </p>  <p>  Untuk mencuba ini, masukkan "Peraturan HMR" dalam input dan kemudian ubah nama dalam  <code>  orang. js  </code>  untuk melihatnya bertukar <em> tanpa </em> menyegarkan halaman dan kehilangan keadaan input.  </p>  <p>  Ini adalah contoh mudah tetapi mudah-mudahan anda dapat melihat betapa berguna ini. Terutamanya benar dengan pembangunan komponen </em> komponen seperti React di mana anda mempunyai banyak komponen "bodoh" yang dipisahkan dari keadaan mereka, komponen boleh ditukar dan diserah semula tanpa kehilangan keadaan supaya anda mendapat gelung maklum balas segera.  </p> <h3 id="hotreloadingcss"> Hot Reloading CSS  </h3>  <p>  Tukar warna latar belakang elemen  <code>   <pre>   </code>  dalam gaya  <code> . scss  </code>  dan anda akan melihat bahawa ia <em> tidak </em> digantikan dengan HMR.  </p>  <pre>  <code class="css language-css"> pre {latar belakang: merah;} </code>   </pre>  <p>  Ternyata HMR CSS datang secara percuma apabila anda menggunakan  <code>  gaya-loader  </code> , anda tidak perlu melakukan sesuatu yang istimewa. Kami hanya memecahkan pautan ini dalam rantai dengan mengeluarkan modul CSS keluar ke fail CSS luaran yang <em> tidak boleh </em> diganti.  </p>  <p>  Jika kita mengembalikan peraturan Sass kita kepada keadaan asalnya dan keluarkan  <code>  extractCSS  </code>  dari senarai pemalam, anda akan dapat melihat semula semula Sass anda juga.  </p>  <pre>   <code class="javascript language-javascript">  {ujian: / \. scss $ /,loader: ['gaya-loader', 'css-loader', 'sass-loader']} </code>   </pre> <h2 id="http2"> HTTP / 2  </h2>  <p>  Salah satu faedah utama menggunakan bundler modul seperti webpack adalah ia dapat membantu anda memperbaiki prestasi dengan memberi anda kawalan bagaimana aset tersebut dibina </em> dan kemudian <em> diambil </em> pada pelanggan. Ia telah dianggap sebagai amalan terbaik selama bertahun-tahun untuk menggabungkan fail untuk mengurangkan jumlah permintaan yang perlu dibuat pada klien. Ini masih sah tetapi HTTP / 2 kini membolehkan beberapa fail dihantar dalam permintaan <em> tunggal </em> supaya penyambungan bukan peluru perak lagi. Apl anda sebenarnya boleh mendapat manfaat daripada memiliki banyak fail kecil yang di-cache secara individu, pelanggan kemudiannya boleh mengambil satu modul yang berubah daripada harus memuat semula keseluruhan berkas dengan <em> kebanyakannya </em> kandungan yang sama.  </p>  <p>  Pencipta Webpack Tobias Semalt telah menulis jawatan bermaklumat menjelaskan mengapa bundling masih penting, walaupun dalam era HTTP / 2.  </p>  <p>  Baca lebih lanjut tentang ini di webpack & HTTP / 2.  </p> <h2 id="overtoyou"> Lebih kepada Anda  </h2>  <p>  Saya pasti berharap anda telah mendapat pengenalan ini untuk webpack 2 membantu dan boleh mula menggunakannya untuk memberi kesan yang besar. Ia boleh mengambil sedikit masa untuk membungkus kepala anda di dalam konfigurasi webpack, loaders dan plugins tetapi belajar bagaimana alat ini berfungsi akan membayar.  </p>  <p>  Adakah webpack modul pilihan anda? Izinkan saya tahu di komen di bawah.  </p>  <p>  <em> Artikel ini disemak semula oleh Scott Molinari, Joan Yin dan Joyce Echessa. Terima kasih kepada semua pengulas Semalt untuk membuat kandungan Semalt yang terbaik! </em>  </p> <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3"><div class="l-d-f l-pt3"><img src = "/ img / a1584af6bf3bf8b6c097948153d7b0f64. jpg" alt = "Panduan Permulaan untuk Webpack 2 dan Modul BundlingPanduan Permulaan untuk Webpack 2 dan Modul BundlingRelated Topics:
Mentah JavaScriptNode. jsAngularJSES6Tools & Semalt
"/><div class="f-lh-title"><div class="f-c-grey-300"> Bertemu penulis  </div> <div class="f-large">Mark Brown<i class="fa fa-twitter"> </i>  </div>  </div>  </div> <div class="f-light f-lh-copy l-mt3"> Hello. Saya seorang pemaju web akhir dari Melbourne, Australia. Saya suka bekerja di web, menghargai reka bentuk yang baik dan bekerja bersama orang berbakat yang saya boleh belajar dari. Saya mempunyai minat khusus dalam pengaturcaraan visual supaya berseronok bekerja dengan SVG dan kanvas.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </span>  </p>  </p>  </p>  </p>  </li>  </code>  </code>  </code>  </html>  </html>  </html>  </html>  </head>  </head>  </head>  </head>  </meta>  </meta>  </meta>  </meta>                                                                             
March 1, 2018