Mulai menggunakan fitur validasi prop ReactJS , yang menurut dokumen hanya berfungsi dalam 'mode pengembangan' karena alasan performa.
React tampaknya memvalidasi properti dari komponen tertentu yang telah saya beri anotasi, tetapi saya tidak ingat secara eksplisit mengaktifkan 'mode pengembangan'.
Saya mencoba mencari cara memicu / mengubah mode pengembangan, tetapi belum berhasil.
process.env
untuk pengguna webpack: stackoverflow.com/questions/37311972/…Jawaban:
Jawaban lain mengasumsikan Anda menggunakan file eksternal yang sudah dibuat sebelumnya dari react, dan meskipun benar itu bukan cara kebanyakan orang akan atau harus menggunakan React sebagai sebuah paket. Terlebih lagi, pada titik ini hampir setiap pustaka dan paket React juga bergantung pada konvensi yang sama untuk mematikan pembantu waktu pengembang selama produksi. Hanya menggunakan reaksi yang diperkecil akan meninggalkan semua potensi pengoptimalan di atas meja juga.
Pada akhirnya keajaiban datang ke React yang menyematkan referensi ke
process.env.NODE_ENV
seluruh basis kode; ini bertindak seperti fitur toggle.Di atas adalah pola yang paling umum, dan pustaka lain juga mengikutinya. Jadi untuk "menonaktifkan" pemeriksaan ini kita perlu beralih
NODE_ENV
ke"production"
Cara yang tepat untuk menonaktifkan "mode pengembang" adalah melalui bundler pilihan Anda.
webpack
Gunakan
DefinePlugin
di konfigurasi webpack Anda seperti ini:Browserify
Gunakan Envify transform dan jalankan langkah build browserify Anda dengan
NODE_ENV=production
("set NODE_ENV=production"
di Windows)Hasil
Ini akan menghasilkan bundel keluaran yang memiliki semua contoh
process.env.NODE_ENV
diganti dengan string literal:"production"
Bonus
Saat mengecilkan kode yang diubah, Anda dapat memanfaatkan "Penghapusan Kode Mati". DCE adalah ketika minifier yang cukup pintar untuk menyadari bahwa:
"production" !== "production"
adalah selalu salah dan jadi hanya akan menghapus kode apapun dalam jika blok menghemat byte.sumber
'"production"'
yaitu. dikutip ganda, stringify melakukannya untuk AndaJSON.stringify(process.env.NODE_ENV)
agar dapat diubah melaluiNODE_ENV=production webpack ...
pada baris perintah. Bonus tambahan dari kode eksplisit =)DefinePlugin
penggunaan ini dapat diganti dengannew webpack.EnvironmentPlugin(['NODE_ENV'])
Ya, ini tidak didokumentasikan dengan baik, tetapi pada halaman unduh ReactJS berbicara tentang mode pengembangan dan produksi:
Pada dasarnya, versi React yang tidak dikecilkan adalah mode "pengembangan", dan versi yang dikecilkan dari React adalah mode "produksi".
Untuk berada dalam mode "produksi", cukup sertakan versi yang diperkecil
react-0.9.0.min.js
sumber
npm
paket react secara langsung, gunakan sesuatu seperti envify untuk mengaturNODE_ENV = 'production'
untuk melakukan pemeriksaan yang sama. @EdwardMSmith Beri tahu saya di mana Anda ingin melihat info itu dan saya dapat menambahkannya (atau Anda cukup mengirimkan PR)!NODE_ENV
harus ada di atas.Saya memposting ini di tempat lain tetapi, terus terang, di sini akan menjadi tempat yang lebih baik.
Dengan asumsi Anda menginstal React 15.0.1 dengan npm,
import react from 'react'
ataureact = require('react')
akan berjalan./mode_modules/react/lib/React.js
yang merupakan sumber mentah React.Dokumen React menyarankan Anda menggunakan
./mode_modules/react/dist/react.js
untuk pengembangan danreact.min.js
produksi.Jika Anda meminimalkan
/lib/React.js
atau/dist/react.js
untuk produksi, React akan menampilkan pesan peringatan bahwa Anda telah meminimalkan kode non-produksi:Warning: It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See fb.me/react-minification for more details.
react-dom, redux, react-redux berperilaku serupa. Redux menampilkan pesan peringatan. Saya percaya react-dom juga begitu.
Jadi, Anda jelas didorong untuk menggunakan versi produksi dari
/dist
.Namun jika Anda mengecilkan
/dist
versinya, UglifyJsPlugin webpack akan mengeluh.WARNING in ../~/react/dist/react.js Critical dependencies: 4:478-485 This seems to be a pre-built javascript file. Though this is possible, it's not recommended. Try to require the original source to get better results. @ ../~/react/dist/react.js 4:478-4851
Anda tidak dapat menghindari pesan ini karena UglifyJsPlugin hanya dapat mengecualikan potongan webpack, bukan file individual.
Saya menggunakan versi pengembangan dan produksi
/dist
sendiri./dist/react.min.js
dioptimalkan untuk produksi. Saya tidak membaca bukti bahwa'process.env': { NODE_ENV: JSON.stringify(IS_PRODUCTION ? 'production' : 'development') }
plus uglify berfungsi sebaik '/ dist / react.min.js`. Saya tidak membaca bukti bahwa Anda mendapatkan kode yang sama.Anda dapat meminta webpack menggunakan
/dist
versinya dengan:sumber
Untuk build berbasis webpack, saya biasa menyiapkan webpack.config.js terpisah untuk DEV dan PROD. Untuk Prod, selesaikan alias seperti di bawah ini
Anda dapat menemukan yang berfungsi dari sini
sumber
Jika Anda mengerjakan sesuatu seperti tutorial ReactJS.NET / Webpack ini , Anda tidak dapat menggunakan process.env untuk mengaktifkan / menonaktifkan mode pengembangan React sejauh yang saya tahu. Contoh ini menautkan ke react.js secara langsung (lihat Index.cshtml ), jadi Anda hanya perlu memilih .min.js atau varian yang tidak dikecilkan dengan mengubah URL.
Saya tidak yakin mengapa demikian, karena contoh webpack.config.js memiliki komentar yang tampaknya menyiratkan
externals: { react: 'React' }
akan melakukan pekerjaan itu, tetapi kemudian melanjutkan dan menyertakan bereaksi langsung ke halaman.sumber
Untuk hanya pengguna v4 Webpack:
Menentukan
mode: production
danmode: development
dalam konfigurasi Webpack Anda akan menentukanprocess.env.NODE_ENV
menggunakan DefinePlugin secara default. Tidak perlu kode tambahan!webpack.prod.js (diambil dari dokumen)
Dan di JS kami:
Dokumen Webpack: https://webpack.js.org/guides/production/#specify-the-mode
sumber
Saya menggunakan proses pembuatan manual yang berjalan melalui Webpack, jadi itu adalah proses dua langkah bagi saya:
Setel variabel lingkungan dari package.json menggunakan paket cross-env:
"scripts": { "build-dev": "cross-env NODE_ENV=development webpack --config webpack.config.js", "build-prod": "cross-env NODE_ENV=production webpack --config webpack.config.js" }
Ubah file webpack.config.js untuk menggunakan variabel lingkungan (yang diteruskan ke React untuk menentukan apakah kita dalam mode pengembangan atau produksi), dan nonaktifkan meminimalkan bundel yang diproduksi jika kita dalam mode pengembangan sehingga kita dapat melihat nama sebenarnya dari komponen kami. Kita perlu menggunakan properti pengoptimalan webpack di file webpack.config.js untuk ini:
optimization: { nodeEnv: process.env.NODE_ENV, minimize: process.env.NODE_ENV === 'production' }
webpack v4.41.5, React v16.9.19, cross-env v7.0.0, node v10.16.14
sumber