Pertanyaan Cara kerja "sertakan" dan "kecualikan" berfungsi di loader webpack


Perbarui & Jawab:

Salah paham saya adalah:

Semua file yang diimpor / dibutuhkan akan diubah oleh loader.

Namun, beberapa file impor / wajib tidak perlu diubah. Misalnya, file js di "node_module" telah diproses. Jadi tidak perlu diubah lagi oleh Babel loader. Itulah mengapa kita perlu "mengecualikan: / node_modules /" di loader.

Demikian pula, jika Anda tahu file apa yang akan diubah oleh loader, Anda dapat menggunakan "sertakan".

Secara sederhana, entry.js akan menyertakan semua file yang diimpor / dibutuhkan. Tetapi di antara file-file ini, hanya beberapa dari mereka yang perlu diubah. Itu sebabnya "loader" memperkenalkan "include" dan "exclude".


Saya masih belum cukup jelas tentang alasan mengapa kami perlu menggunakan "include" atau "exclude" dalam loader webpack.

Karena file js entri akan selalu perlu menyertakan file js impor / yang diperlukan secara rekursif. Semua file yang diimpor / dibutuhkan akan diubah oleh loader. Jika itu masalahnya, mengapa kita perlu "memasukkan" atau "mengecualikan" dalam loader?

Satu kasus yang umum adalah "kecualikan: / node_modules /". Hal yang membingungkan saya adalah bahwa jika file js entri memerlukan beberapa file dari node_modules dan kemudian kita mengecualikan node_modules. Maka file bundel terakhir tidak akan berisi file yang di-requied dari node_modules. Dalam hal ini, bundle.js final tidak akan berfungsi dengan benar. Apakah saya kehilangan sesuatu di sini?

module.exports = {
  entry: [
    './index.js'
  ],
  output: {
    path: path.join(__dirname,"public"),
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      test: /\.js$/,
      loader: 'babel',
      exclude: /node_modules/,
      query: {
          presets: ['es2015']
        }
    }]
  }
}; 

Terima kasih

Derek


17
2018-06-14 23:27


asal


Jawaban:


Masalahnya adalah tanpa itu exclude (atau an include) Webpack akan melintasi melalui dependensi ketika Anda menunjuk mereka di kode Anda dan memprosesnya. Meskipun itu bisa berhasil, itu akan datang dengan penalti kinerja yang berat.

Saya lebih suka mengatur include diri saya (daftar putih di daftar hitam) karena itu memberi saya kontrol lebih besar atas perilaku. saya include direktori aplikasi saya dan kemudian tambahkan lebih banyak item ke include berdasarkan kebutuhan. Ini memungkinkan saya untuk membuat pengecualian dengan mudah dan memproses bit dari node_modules jika benar-benar dibutuhkan.


29
2018-06-15 10:38



Jawabannya sejauh ini belum benar-benar menjawab pertanyaan inti Anda. Anda ingin tahu bagaimana aplikasi paket Anda masih berfungsi meskipun dependensinya telah 'dikecualikan'.

Sebenarnya, properti 'termasuk' dan 'mengecualikan' itu memberitahukan loader apakah akan menyertakan / mengecualikan file yang dijelaskan (seperti isi dari node_modules), bukan webpack itu sendiri.

Jadi, modul 'dikecualikan' yang Anda impor node_modules  akan dibundel - tapi mereka tidak akan berubah oleh babel. Ini biasanya perilaku yang diinginkan: sebagian besar perpustakaan sudah terekam ke ES 5.1 (atau bahkan ES 3), sehingga siklus CPU yang mengurai mereka dengan babel (misalnya) tidak berguna. Paling buruk, seperti dalam kasus pustaka file tunggal besar seperti jQuery, itu bisa melempar kesalahan dan membuat bangunan Anda terhenti. Jadi kami mengecualikan node_modules.


12
2017-09-19 16:46