React router memungkinkan aplikasi bereaksi untuk menangani /arbitrary/route
. Agar ini berfungsi, saya perlu server saya untuk mengirim aplikasi Bereaksi pada rute yang cocok.
Tetapi server dev webpack tidak menangani titik akhir yang sewenang-wenang.
Ada solusi di sini menggunakan server ekspres tambahan. Cara mengizinkan webpack-dev-server untuk mengizinkan titik masuk dari react-router
Tapi saya tidak ingin menjalankan server ekspres lain untuk memungkinkan pencocokan rute. Saya hanya ingin memberi tahu server dev webpack untuk mencocokkan url apa pun dan mengirimkan saya aplikasi reaksi saya. silahkan.
reactjs
ecmascript-6
webpack
react-router
eguney
sumber
sumber
Jawaban:
Saya menemukan solusi termudah untuk menyertakan konfigurasi kecil:
Saya menemukan ini dengan mengunjungi: PUSHSTATE WITH WEBPACK-DEV-SERVER .
sumber
--history-api-fallback
devServer: { port: 3000, historyApiFallback: true },
Opsi historyApiFallback pada dokumentasi resmi untuk webpack-dev-server menjelaskan dengan jelas bagaimana Anda dapat mencapai keduanya dengan menggunakan
yang hanya jatuh kembali ke index.html ketika rute tidak ditemukan
atau
sumber
historyApiFallback
webpack-dev-server
adalah penerusnyawebpack-serve
, bukan sebaliknya seperti yang disebutkan dalam stackoverflow.com/questions/31945763/… .Menambahkan jalur publik ke config membantu webpack untuk memahami root sebenarnya (
/
) bahkan ketika Anda sedang dalam subroutes, mis./article/uuid
Jadi modifikasi konfigurasi webpack Anda dan tambahkan yang berikut:
Tanpa
publicPath
sumber daya mungkin tidak dimuat dengan benar, hanya index.html.Diuji di Webpack
4.6
Bagian konfigurasi yang lebih besar (hanya untuk mendapatkan gambar yang lebih baik):
sumber
historyApiFallback
trick hanya bekerja untuk bagian terakhir dari URL untuk beberapa alasan./test
akan bekerja tetapi/test/test
akan memberi 404.historyApiFallback: {index: '/'}
atauhistoryApiFallback: true
(keduanya bekerja untuk saya), pengaturanpublicPath
juga penting dalam kasus saya (Router 5.2).Bekerja untuk saya seperti ini
Bekerja pada aplikasi kerusuhan
sumber
Situasi saya sedikit berbeda, karena saya menggunakan CLI sudut dengan webpack dan opsi 'eject' setelah menjalankan perintah e eject . Saya memodifikasi skrip npm yang dikeluarkan untuk 'npm start' di package.json untuk meneruskan flag --history-api-fallback
sumber
Jika Anda memilih untuk menggunakan
webpack-dev-server
, Anda tidak boleh menggunakannya untuk melayani seluruh aplikasi Bereaksi Anda. Anda harus menggunakannya untuk melayanibundle.js
file Anda serta dependensi statis. Dalam hal ini, Anda harus memulai 2 server, satu untuk titik masuk Node.js, yang sebenarnya akan memproses rute dan melayani HTML, dan satu lagi untuk bundel dan sumber daya statis.Jika Anda benar-benar menginginkan satu server, Anda harus berhenti menggunakan
webpack-dev-server
dan mulai menggunakan webpack-dev-middleware dalam server aplikasi Anda. Ini akan memproses bundel "on the fly" (saya pikir ini mendukung caching dan penggantian modul panas) dan memastikan panggilan Andabundle.js
selalu up to date.sumber
Anda dapat mengaktifkan
historyApiFallback
untuk melayaniindex.html
alih - alih kesalahan 404 saat tidak ada sumber daya lain ditemukan di lokasi ini.Jika Anda ingin menyajikan file yang berbeda untuk URI yang berbeda, Anda dapat menambahkan aturan penulisan ulang dasar untuk opsi ini. The
index.html
masih akan disajikan untuk jalur lainnya.sumber
Saya tahu pertanyaan ini untuk webpack-dev-server, tetapi bagi siapa saja yang menggunakan webpack-serve 2.0. dengan webpack 4.16.5 ; webpack-serve memungkinkan add-on. Anda harus membuat
serve.config.js
:Referensi
Anda harus mengubah skrip dev dari
webpack-serve
menjadinode serve.config.js
.sumber
Bagi saya, saya punya titik "." di jalur saya misalnya
/orgs.csv
jadi saya harus meletakkan ini di conf webpack saya.sumber
Saya setuju dengan sebagian besar jawaban yang ada.
Satu hal kunci yang ingin saya sebutkan adalah jika Anda mengalami masalah saat memuat ulang halaman secara manual di jalur yang lebih dalam di mana ia menyimpan semua kecuali bagian terakhir dari jalur dan mengupas nama
js
file bundel Anda, Anda mungkin memerlukan pengaturan tambahan (khususnyapublicPath
pengaturan ).Misalnya, jika saya memiliki path
/foo/bar
dan file bundler saya dipanggilbundle.js
. Ketika saya mencoba untuk me-refresh halaman secara manual, saya mendapatkan pepatah 404/foo/bundle.js
tidak dapat ditemukan. Menariknya jika Anda mencoba memuat ulang dari jalan/foo
Anda tidak melihat masalah (ini karena fallback menanganinya).Coba gunakan di bawah ini bersama dengan
webpack
konfigurasi Anda yang ada untuk memperbaiki masalah.output.publicPath
adalah kuncinya!sumber