Lompat ke konten
Aback Tools Logo

Memperbaiki Galat Validasi Skema css-loader di Webpack

Cara mengurai dan memperbaiki galat validasi skema css-loader di Webpack: perubahan merusak v4, tabel migrasi opsi, membaca jalur galat, dan memvalidasi webpack.config.js sebelum build berikutnya.

DH
Tutorials & How-Tos12 menit baca2,650 kata

Galat validasi skema css-loader adalah salah satu kegagalan build Webpack yang paling umum - ia terpicu sebelum kompilasi dimulai dan memberikan jalur galat yang tampak samar sampai Anda tahu cara membacanya. Panduan ini menjelaskan apa yang memicu galat-galat ini, cara mengurai pesannya, perubahan webpack.config.js mana yang memperbaiki tiap kasus, dan cara memvalidasi konfigurasi agar build berikutnya berhasil pada percobaan pertama.

v4+Perubahan merusak css-loaderOpsi direstrukturisasi di v4
100%Deteksi pra-buildGalat terpicu sebelum kompilasi
0File terkompilasi saat galatBuild berhenti seketika

Apa itu galat validasi skema?

Webpack memvalidasi objek opsi setiap loader terhadap skema JSON sebelum mulai mengompilasi. Skema ini mendefinisikan properti mana yang diizinkan, tipe apa yang diterima, dan nilai mana yang valid. Ketika konfigurasi Anda mengirim properti yang tidak dikenal skema - atau mengirim tipe yang salah untuk properti yang dikenal - Webpack melempar galat validasi skema dan menolak membangun.

Mengapa validasi terjadi sebelum kompilasi

Webpack memvalidasi di muka karena opsi loader memengaruhi cara file diproses. Opsi yang tidak valid bisa menghasilkan keluaran yang salah secara diam-diam jika Webpack mengabaikannya, sehingga validasi ketat saat startup adalah desain yang lebih aman. Konsekuensinya adalah penghentian total sebelum kode tersentuh - tetapi pesan galat selalu memberi tahu persis opsi mana yang salah dan di mana posisinya di pohon konfigurasi Anda.

Format galat

Galat validasi skema css-loader mengikuti struktur yang dapat diprediksi. Ia selalu menyertakan nama loader (css-loader), jalur ke opsi bermasalah di objek konfigurasi Anda (mis. options.localIdentName), masalah spesifik (`properti tidak dikenal, harus salah satu dari nilai yang diizinkan atau harus bertipe [tipe]`), dan sering kali tautan ke dokumentasi loader. Membaca jalur lebih dulu selalu menjadi jalan tercepat menuju perbaikan.

Note

Galat validasi skema dilempar oleh paket schema-utils bawaan Webpack, bukan oleh css-loader sendiri. Setiap loader Webpack yang memakai schema-utils untuk memvalidasi opsinya menghasilkan galat dalam format yang sama - sehingga keterampilan membaca pesan galat ini berlaku untuk semua loader, bukan hanya css-loader.

Mengapa css-loader memicunya

css-loader telah mengalami perubahan signifikan pada skema opsinya antar versi mayor. Pengembang yang memperbarui css-loader - atau menyalin webpack.config.js dari tutorial untuk versi lain - sering berakhir dengan opsi yang valid di rilis lama tetapi kini tidak dikenal atau telah direstrukturisasi.

Semua opsi CSS Modules dipindahkan ke bawah opsi modules untuk menghindari pencemaran opsi tingkat atas dan meningkatkan kejelasan skema.

- css-loader changelog, v4.0.0

Perubahan merusak v4

Sumber paling umum galat skema css-loader adalah migrasi v3 → v4. Di css-loader v3, opsi CSS Modules berada di tingkat atas objek opsi: localIdentName, camelCase, minimize, dan modules sebagai boolean. Di v4, semua opsi CSS Modules pindah ke sub-objek modules khusus, dan minimize dihapus sepenuhnya (minifikasi CSS kini menjadi bagian css-minimizer-webpack-plugin). Proyek apa pun yang masih memakai sintaks opsi datar v3 dengan instalasi v4+ langsung memicu galat validasi skema.

Pemicu umum lainnya

  • Salah ketik pada nama opsi - moduls alih-alih modules, localIdentiyName alih-alih localIdentName
  • Tipe nilai salah - mengirim string di mana objek dibutuhkan, atau angka di mana boolean diharapkan
  • Opsi yang dihapus - minimize (dihapus di v4), importLoaders sebagai boolean (harus angka), camelCase (dihapus di v6)
  • Menyalin config dari tutorial versi lain - jawaban Stack Overflow untuk css-loader v2 masih banyak disajikan mesin pencari
  • Dependensi peer yang berkonflik - paket pihak ketiga mengunci versi css-loader lama yang tidak kompatibel dengan konfigurasi Anda

Tip

Sebelum men-debug pesan galat, jalankan npm ls css-loader (atau yarn why css-loader) untuk memastikan versi yang benar-benar terpasang. Versi di package.json dan versi di disk bisa berbeda setelah instalasi gagal atau konflik dependensi. Selalu perbaiki ketidaksesuaian versi lebih dulu.

Membaca pesan galat

Setiap galat validasi skema css-loader memuat informasi yang Anda butuhkan untuk memperbaikinya - jika Anda tahu cara membaca notasi jalurnya. Pesan galat punya tiga bagian penting: nama loader, jalur konfigurasi, dan deskripsi masalah yang spesifik. Fokuslah padanya dengan urutan itu.

Memahami notasi jalur

Notasi jalur mencerminkan struktur webpack.config.js Anda. Jalur seperti module.rules[0].use[1].options.localIdentName berarti: lihat kunci module, lalu rules, lalu item array pertama (indeks 0), lalu use, lalu loader kedua di array use itu (indeks 1), lalu options, lalu properti localIdentName. Ikuti jalur itu di file konfigurasi Anda untuk menemukan baris persis yang menyebabkan galat.

Tiga subtipe galat

Subtipe galatPesan memuatArtinyaPerbaikan
Properti tidak dikenal"has an unknown property"Properti tidak ada di versi iniHapus atau ganti nama properti
Tipe salah"should be a [type]"Properti benar, tipe nilai salahUbah nilai ke tipe yang benar
Nilai tidak valid"should be one of the allowed"Properti benar, nilai di luar himpunan yang diizinkanGunakan salah satu nilai valid yang tercantum
Properti tambahan"additionalProperties is false"Objek memiliki kunci di luar skemaHapus kunci yang tidak tercantum dari objek

Subtipe «harus salah satu dari yang diizinkan» selalu mencantumkan opsi valid sebaris dalam galat. Subtipe «properti tidak dikenal» tidak menyarankan alternatif - Anda perlu memeriksa dokumentasi css-loader terkini untuk nama baru atau padanan properti. Gunakan Validator Konfigurasi Webpack untuk mendapatkan semua galat sekaligus alih-alih menemukannya satu per satu lewat build berulang.

Warning

Webpack melaporkan galat validasi skema satu per satu secara bawaan - memperbaiki galat pertama lalu membangun ulang bisa menyingkap galat kedua. Jika konfigurasi Anda telah melalui peningkatan versi mayor, tempelkan seluruh config ke [Validator Konfigurasi Webpack](/tools/data/validators/webpack-config-validator) lebih dulu untuk melihat semua galat sekaligus sebelum melakukan perubahan apa pun.

Cara memperbaiki galat css-loader

Perbaikannya selalu perubahan tertarget pada objek opsi css-loader di webpack.config.js Anda. Jalani langkah-langkah ini secara berurutan agar galat terselesaikan dengan rapi tanpa memunculkan galat baru.

1

Baca pesan galat lengkap dan salin jalurnya

Gulir melewati stack trace ke bagian ValidationError dan salin pesan lengkapnya. Ia menyebut nama loader (css-loader), jalur konfigurasi persis, dan masalahnya. Jalur itu memberi tahu entri rules mana dan posisi mana di array use yang memuat objek opsi tidak valid.

2

Temukan rule di webpack.config.js

Temukan entri module.rules yang memuat file .css. Biasanya tampak seperti test untuk file .css dengan style-loader dan css-loader beserta objek opsi. Objek opsi di dalam entri css-loader adalah tempat semua galat skema berasal. Buka objek itu dan bandingkan dengan daftar opsi valid untuk versi css-loader yang terpasang.

3

Terapkan perbaikan yang tepat untuk subtipe galat Anda

Untuk galat properti tidak dikenal: ganti nama atau pindahkan properti ke lokasi barunya. localIdentName menjadi modules.localIdentName. minimize dihapus - pasang css-minimizer-webpack-plugin secara terpisah. camelCase dihapus - gunakan opsi exportLocalsConvention di objek modules sebagai gantinya. Untuk galat tipe salah: ubah modules: true menjadi objek dengan mode: 'local' jika Anda butuh konfigurasi CSS Modules, atau biarkan sebagai boolean jika tidak.

4

Validasi config yang diperbaiki sebelum membangun ulang

Tempelkan webpack.config.js yang diperbarui ke Validator Konfigurasi Webpack untuk memastikan semua galat skema teratasi sebelum menjalankan build penuh. Ini menangkap galat sekunder akibat perbaikan dan menghemat satu siklus build lagi.

Validator Konfigurasi Webpack

Tempelkan webpack.config.js Anda dan validasi seketika semua opsi loader - mendeteksi galat skema css-loader, rule modul tidak valid, dan kesalahan konfigurasi keluaran sebelum build berikutnya.

Open tool

Kesalahan konfigurasi css-loader yang umum

Inilah galat opsi spesifik yang paling sering muncul dalam kegagalan validasi skema css-loader. Setiap entri menunjukkan pola config yang rusak, pengganti yang benar, dan versi css-loader mana yang terdampak perubahan itu.

localIdentName di tingkat atas (v3 → v4)

Di css-loader v3, localIdentName adalah opsi tingkat atas yang mengendalikan pembuatan nama kelas CSS Modules. Di v4+, ia pindah ke dalam objek modules. Perbaikannya adalah menyarangkannya di dalam modules dengan properti localIdentName yang diisi pola Anda. Pesan galatnya berbunyi options has an unknown property 'localIdentName' - ini adalah galat migrasi css-loader nomor satu.

Opsi minimize dihapus (v4+)

Opsi minimize dihapus dari css-loader di v4. Minifikasi CSS kini ditangani terpisah oleh css-minimizer-webpack-plugin di array optimization.minimizer. Hapus minimize sepenuhnya dari opsi css-loader Anda dan tambahkan css-minimizer-webpack-plugin ke build Anda jika minifikasi diperlukan. Validator CSS dapat membantu memastikan keluaran CSS benar setelah berganti alat minifikasi.

Opsi camelCase dihapus (v6)

css-loader v6 menghapus opsi camelCase tingkat atas. Penggantinya adalah modules.exportLocalsConvention, yang menerima camelCase, camelCaseOnly, dashes, atau dashesOnly. Perbarui opsi Anda untuk mengatur exportLocalsConvention di dalam objek modules. Tanpa perubahan ini, instalasi v6 apa pun dengan properti camelCase lama memicu galat properti tidak dikenal.

Opsi lama (rusak)Versi css-loaderPengganti yang benar
options.localIdentNamev4+options.modules.localIdentName
options.minimizev4+plugin css-minimizer-webpack-plugin
options.camelCasev6+options.modules.exportLocalsConvention
options.modules: truev4+ (untuk kustomisasi)options.modules: { mode: "local", ... }
options.importLoaders: truesemuaoptions.importLoaders: 1 (angka, bukan boolean)
options.sourceMap: "inline"v4+options.sourceMap: true (hanya boolean)

Note

Daftar lengkap opsi valid untuk versi css-loader Anda selalu tersedia di berkas skema options.json milik loader di GitHub. Buka webpack-contrib/css-loader, pilih tag versi Anda, dan buka src/options.json - inilah skema persis yang dipakai Webpack untuk memvalidasi.

Memvalidasi konfigurasi webpack Anda

Cara paling efisien menyelesaikan galat skema css-loader - terutama setelah peningkatan versi mayor - adalah memvalidasi seluruh webpack.config.js sekaligus alih-alih menemukan galat satu build demi satu build. Beberapa alat membuat ini cepat.

Validator Konfigurasi Webpack

Validator Konfigurasi Webpack menerima webpack.config.js lengkap Anda dan melaporkan semua pelanggaran skema di setiap loader, plugin, dan opsi tingkat atas dalam satu lintasan. Ia menampilkan notasi jalur yang sama seperti yang Webpack pakai di galat runtime, sehingga Anda bisa mencocokkan keluarannya dengan galat yang Anda lihat di terminal. Tempelkan config, dapatkan semua masalah sekaligus, perbaiki, lalu tempel lagi untuk konfirmasi - tanpa siklus build.

Periksa dulu berkas config untuk galat sintaks JavaScript

Jika Webpack gagal bahkan mem-parsing webpack.config.js Anda karena galat sintaks JavaScript - kurung kurawal tak berpasangan, koma yang hilang, atau spread tidak valid - Anda akan melihat galat parsing Node.js alih-alih galat validasi skema. Gunakan Validator Sintaks JavaScript untuk menyingkirkan masalah sintaks sebelum men-debug validasi skema.


Memvalidasi berkas konfigurasi terkait

css-loader jarang menjadi satu-satunya berkas konfigurasi dalam pipeline build. Jika Anda memakai PostCSS untuk transformasi, Validator Konfigurasi PostCSS menangkap galat urutan plugin dan dependensi yang hilang di postcss.config.js. Jika Anda memakai stylelint untuk pemeriksaan kualitas CSS, Validator Konfigurasi Stylelint memvalidasi .stylelintrc Anda sebelum mengganggu build. Validator Konfigurasi ESLint berguna jika rantai build Anda juga menjalankan ESLint - salah konfigurasi di sana bisa muncul sebagai galat build yang menyerupai galat loader.

Validator Konfigurasi PostCSS

Validasi postcss.config.js untuk galat urutan plugin dan opsi - menangkap masalah konfigurasi yang sering menyertai galat skema css-loader pada setup Webpack yang kompleks.

Open tool

css-loader dengan PostCSS dan CSS Modules

Sebagian besar setup Webpack produksi memakai css-loader bersama PostCSS dan CSS Modules. Masing-masing menambah opsi sendiri dan potensi galat skema sendiri. Memahami interaksinya mencegah konflik konfigurasi yang paling umum.

Opsi importLoaders

Ketika PostCSS berjalan pada file CSS sebelum css-loader, Anda harus menyetel importLoaders: 1 (atau lebih) di opsi css-loader agar pernyataan @import dalam CSS juga diproses PostCSS. Tanpa itu, file yang diimpor melewati PostCSS. Kesalahan umum adalah menyetel importLoaders: true - ini memicu galat validasi skema karena opsi harus berupa angka, bukan boolean. Setel nilainya ke jumlah loader yang berjalan sebelum css-loader dalam rantai.

CSS Modules dengan nama kelas kustom

Kustomisasi nama kelas CSS Modules pindah ke sub-objek modules di css-loader v4. Konfigurasi CSS Modules lengkap dengan pola identitas kustom memakai mode, localIdentName, dan exportLocalsConvention - masing-masing sebagai opsi terpisah dengan batasan skema sendiri. Mengirim salah satunya di tingkat atas options alih-alih di dalam modules menghasilkan galat properti tidak dikenal.

Opsi url dan import

Opsi url dan import milik css-loader mengendalikan apakah loader menyelesaikan referensi url() dan pernyataan @import. Keduanya menerima boolean atau objek dengan fungsi filter. Mengirim fungsi polos - alih-alih objek dengan properti filter - memicu galat skema karena skema opsi mengharapkan objek dengan properti filter, bukan fungsi telanjang. Selalu bungkus fungsi filter dalam bentuk objek yang diharapkan.

Warning

Jika Anda bermigrasi dari Webpack 4 ke Webpack 5, opsi css-loader bukan satu-satunya yang berubah. Loader file-loader dan url-loader yang dulu menangani aset digantikan oleh Asset Modules bawaan Webpack 5. Menyimpan loader-loader itu bersama konfigurasi Asset Modules Webpack 5 menciptakan rule yang berkonflik, yang bisa tampak seperti galat css-loader padahal sebenarnya konflik penanganan aset. Validasi seluruh config Anda dengan [Validator Konfigurasi Webpack](/tools/data/validators/webpack-config-validator) untuk memisahkan masalah css-loader dari konflik Asset Modules.

Key takeaways

  • Galat validasi skema css-loader terpicu sebelum kompilasi dan selalu menyebut jalur persis opsi yang tidak valid - baca jalurnya lebih dulu, bukan stack trace.
  • Penyebab paling umum adalah memakai sintaks opsi css-loader v3 (localIdentName datar, minimize, camelCase) pada instalasi v4+ atau v6+.
  • Di css-loader v4+, semua opsi CSS Modules pindah ke dalam sub-objek modules - localIdentName menjadi modules.localIdentName.
  • minimize dihapus di v4 - gunakan css-minimizer-webpack-plugin di optimization.minimizer sebagai gantinya.
  • importLoaders harus berupa angka (mis. 1), bukan boolean - mengirim true memicu galat validasi tipe.
  • Gunakan Validator Konfigurasi Webpack untuk menangkap semua galat skema dalam satu lintasan sebelum membangun ulang.
  • Periksa juga config terkait - salah konfigurasi PostCSS, ESLint, dan Stylelint sering menyertai galat css-loader di pipeline yang kompleks.

Pertanyaan yang sering diajukan

A css-loader schema validation error is thrown when an option you passed in the css-loader options object does not match the JSON schema that css-loader uses to validate its configuration. This happens when you use a property name that does not exist in the current version of css-loader, pass the wrong value type for a known option, or use a configuration pattern from an older css-loader version that has since changed. Webpack validates loader options against their declared schemas before building, so the error appears immediately without any compilation.

Remove or rename the property named in the error message. The most common cause is using a deprecated option from an older css-loader version - for example, `localIdentName` at the top level of options, which moved to `modules.localIdentName` in css-loader v4+. Check the css-loader changelog for the version you are running and update your option structure accordingly. The error message always names the exact unknown property, so the fix is targeted.

css-loader introduced breaking option schema changes in several major versions. The most significant was v4, which moved all CSS Modules options under a dedicated `modules` object and dropped top-level options like `localIdentName`, `minimize`, and `camelCase`. If you upgraded from v3 to v4 or later, any of these flat options will now trigger a schema validation error. Migrate each option to the new nested structure and validate the result with the Webpack Config Validator tool.

This error means you passed a value of the correct type but outside the allowed set. For example, the `modules` option accepts a boolean, a string (`"local"`, `"global"`, `"pure"`), or a configuration object - passing any other string triggers this error. The error message lists the allowed values. Find the option, check what the current css-loader version accepts for that option, and update your config to use one of the listed valid values.

Yes. In Webpack 5 with css-loader v6+, enable CSS Modules by setting the `modules` option to an object: `{ mode: "local", localIdentName: "[name]__[local]--[hash:base64:5]" }`. The boolean shorthand `modules: true` still works for basic use, but any CSS Modules customisation requires the object form. A common source of schema errors is mixing the flat-option syntax from css-loader v3 with a v6 installation.

Yes. The Webpack Config Validator checks your entire webpack.config.js including the options objects passed to each loader in your module.rules array. It detects unknown properties, incorrect value types, and invalid option combinations for css-loader and other loaders. Paste your config and the validator reports issues with the same path notation (e.g. "module.rules[0].use[1].options.localIdentName") that Webpack itself uses in schema validation errors.

css-loader processes CSS files into JavaScript modules - it handles CSS parsing, CSS Modules, and url() resolution. style-loader injects the resulting CSS into the DOM at runtime. Schema validation errors naming css-loader in the message are caused by options in the css-loader options object. style-loader has its own smaller options schema and its errors are separate. Both loaders are validated independently by Webpack before the build starts.

Use mini-css-extract-plugin for production builds - it extracts CSS into separate files for better caching and performance. Use style-loader for development only - it injects styles at runtime which enables hot module replacement but is not suitable for production. A common Webpack pattern switches between the two based on the NODE_ENV value. Neither choice affects css-loader options or schema validation errors, which are independent of which output plugin you use.

ShareXLinkedIn