Saya mencoba untuk pindah dari Gulp
ke Webpack
. Di Gulp
Saya punya tugas yang menyalin semua file dan folder dari / static / folder ke / build / folder. Bagaimana caranya melakukan hal yang sama Webpack
? Apakah saya memerlukan plugin?
javascript
webpack
Vitalii Korsakov
sumber
sumber
Jawaban:
Anda tidak perlu menyalin banyak hal, webpack bekerja berbeda dari tegukan. Webpack adalah bundler modul dan semua yang Anda rujuk dalam file Anda akan disertakan. Anda hanya perlu menentukan loader untuk itu.
Jadi, jika Anda menulis:
Webpack pertama-tama akan mencoba mem-parsing file yang direferensikan sebagai JavaScript (karena itu defaultnya). Tentu saja itu akan gagal. Itu sebabnya Anda perlu menentukan loader untuk tipe file itu. The File - atau url-loader misalnya mengambil file direferensikan, memasukkannya ke dalam folder output Webpack (yang harus
build
dalam kasus Anda) dan mengembalikan url hash untuk file itu.Biasanya loader diterapkan melalui konfigurasi webpack:
Tentu saja Anda perlu menginstal file-loader terlebih dahulu untuk membuat ini berfungsi.
sumber
Membutuhkan aset menggunakan modul file-loader adalah cara webpack dimaksudkan untuk digunakan ( sumber ). Namun, jika Anda membutuhkan fleksibilitas yang lebih besar atau ingin antarmuka yang lebih bersih, Anda juga dapat menyalin file statis langsung menggunakan saya
copy-webpack-plugin
( NPM , Github ). Untuk Andastatic
kebuild
contoh:sumber
Jika Anda ingin menyalin file statis, Anda dapat menggunakan pemuat file dengan cara ini:
untuk file html:
di webpack.config.js:
dalam file js Anda:
./static/ adalah relatif ke tempat file js Anda.
Anda dapat melakukan hal yang sama dengan gambar atau apa pun. Konteksnya adalah metode yang ampuh untuk dijelajahi !!
sumber
index.html
ke dalam subdirektori yang dibuatnya disebut_
(garis bawah), apa yang terjadi?main.js
mengimpor segala sesuatu di dalamstatic
folder:require.context("./static/", true, /^.*/);
Satu keuntungan yang dibawa oleh copy-webpack-plugin yang belum dijelaskan sebelumnya adalah bahwa semua metode lain yang disebutkan di sini masih membundel sumber daya ke dalam file bundel Anda (dan mengharuskan Anda untuk "mengharuskan" atau "mengimpor" mereka di suatu tempat). Jika saya hanya ingin memindahkan beberapa gambar di sekitar atau sebagian parsial template, saya tidak ingin mengacaukan file bundel javascript saya dengan referensi yang tidak berguna untuk mereka, saya hanya ingin file dipancarkan di tempat yang tepat. Saya belum menemukan cara lain untuk melakukan ini di webpack. Diakui itu bukan apa webpack awalnya dirancang untuk, tapi itu pasti kasus penggunaan saat ini. (@BreakDS Saya harap ini menjawab pertanyaan Anda - itu hanya menguntungkan jika Anda menginginkannya)
sumber
Saran di atas bagus. Tetapi untuk mencoba menjawab pertanyaan Anda secara langsung, saya sarankan untuk menggunakan
cpy-cli
skrip yang ditentukan dalampackage.json
.Contoh ini mengharapkan
node
suatu tempat di jalur Anda. Instalcpy-cli
sebagai ketergantungan pengembangan:npm install --save-dev cpy-cli
Kemudian buat beberapa file nodejs. Satu untuk melakukan penyalinan dan yang lainnya untuk menampilkan tanda centang dan pesan.
copy.js
checkmark.js
Tambahkan skrip di
package.json
. Dengan asumsi skrip berada dalam<project-root>/scripts/
Untuk menjalankan sript:
npm run copy
sumber
Kemungkinan besar Anda harus menggunakan CopyWebpackPlugin yang disebutkan dalam jawaban kevlened. Atau untuk beberapa jenis file seperti .html atau .json, Anda juga dapat menggunakan pemuat mentah atau pemuat json. Instal via
npm install -D raw-loader
dan kemudian yang perlu Anda lakukan adalah menambahkan loader lain kewebpack.config.js
file kami .Suka:
Catatan: Mulai ulang webpack-dev-server agar perubahan konfigurasi diterapkan.
Dan sekarang Anda dapat memerlukan file html menggunakan jalur relatif, ini membuatnya lebih mudah untuk memindahkan folder.
sumber
Cara saya memuat statis
images
danfonts
:Jangan lupa untuk menginstal
file-loader
agar berfungsi.sumber
logo.png
juga mereka tidak harus membuat nama pengguna yang tumpul dan "mudah-mudahan" unik untuk menghindari tabrakan global. Alasan yang sama kami menggunakan Modul CSS .[path][name].[ext]
dan ada banyak fleksibilitas yang diberikan untuk memodifikasi ini untuk lingkungan atau kasus penggunaan khusus ... file-loaderAnda dapat menulis bash di package.json Anda:
sumber
"build": "webpack && xcopy images dist\\images\\ /S /Y && xcopy css dist\\css\\ /S /Y"
Saya terjebak di sini juga. copy-webpack-plugin bekerja untuk saya.
Namun, 'copy-webpack-plugin' tidak diperlukan dalam kasus saya (saya pelajari nanti).
webpack mengabaikan
contoh path root
Oleh karena itu, untuk membuatnya bekerja tanpa menggunakan 'copy-webpack-plugin' gunakan '~' di jalur
'~' memberi tahu webpack untuk mempertimbangkan 'gambar' sebagai modul
Catatan: Anda mungkin harus menambahkan direktori induk direktori gambar di
Kunjungi https://vuejs-templates.github.io/webpack/static.html
sumber
File konfigurasi webpack (di webpack 2) memungkinkan Anda untuk mengekspor rantai janji, selama langkah terakhir mengembalikan objek konfigurasi webpack. Lihat dokumen konfigurasi janji . Dari sana:
Anda dapat membuat fungsi salin rekursif sederhana yang menyalin file Anda, dan hanya setelah itu memicu webpack. Misalnya:
sumber
katakanlah semua aset statis Anda berada di folder "statis" di tingkat root dan Anda ingin menyalinnya ke folder build yang mempertahankan struktur subfolder, lalu di file entri Anda) cukup masukkan
sumber