Ich freue mich, Ihnen mitteilen zu können, dass wir an meinem Arbeitsplatz erfolgreich von der Create-React-App (CRA) auf Vite umsteigen! ?
Der Wechsel war nicht einfach, aber notwendig. Unsere App wurde zunehmend träge und die Entwicklererfahrung (DX) verschlechterte sich. Ich habe meinen Laptop den ganzen Tag eingeschaltet gelassen, weil der Neustart der App sehr langsam war. Wenn Sie node_modules jemals entfernt, neu installiert und versucht haben, die App zu starten, könnten Sie eine Stunde damit verlieren, darauf zu warten, dass alles heruntergeladen und erneut gestartet wird. Der Start der App dauert normalerweise 12 bis 15 Minuten – eine erhebliche Verzögerung, insbesondere bei dringenden Fehlerberichten. Darüber hinaus ist CRA veraltet und wird nicht mehr für das Bootstrapping von React-Anwendungen empfohlen.
Warum Vite?
Anfangs habe ich über die Verwendung von Rspack nachgedacht, das als
angepriesen wirdEin direkter Ersatz für Webpack mit leistungsstärkeren Funktionen und außergewöhnlicher Produktivität.
Allerdings verlief der Übergang nicht so reibungslos, wie ich gehofft hatte. Obwohl Rspack kurz vor der Produktionsreife steht (Version 1.0.0-beta.4 zum Zeitpunkt dieses Schreibens), habe ich mich für die ausgereiftere und kampferprobte Lösung entschieden: Vite.
Die Abkehr von Webpack und CRA gab mir eine neue Wertschätzung für diese Tools und den Aufwand, der dahinter steckt. Sie vereinfachen den Entwicklungsprozess erheblich und bieten ein gebrauchsfertiges Setup.
Ich hoffe, dass wir eines Tages einen echten Ersatz für CRA und Webpack haben werden, sodass wir beim Wechsel zu Tools wie Vite keine umfangreichen Dateiänderungen vornehmen müssen.
Wenn Sie keine Ahnung haben, was Webpack, Vite oder Rspack sind, bin ich in meinem letzten Beitrag in dieses Kaninchenloch gegangen und habe Webpack und seine Funktionen untersucht. Vite und Rspack sind modernere Tools, die eine ähnliche Aufgabe erfüllen, aber effizienter sind.
Bevor ich mich damit befasse, wie ich unsere alte App auf Vite umgestellt habe, möchte ich die Vor- und Nachteile mitteilen, die mir während meiner kurzen Erfahrung mit Vite in der Entwicklungs- und Produktionsumgebung aufgefallen sind.
Hinweis: Der Laptop, auf dem ich teste, ist ziemlich alt. Auf einer neueren Maschine mit besseren Spezifikationen betrugen die Startzeiten beim zweiten Start nur 20–30 Sekunden.
Mit Webpack
Mit Vite
Dies ist der wichtigste Schritt. Umfangreiche Recherche ist unerlässlich. Ich habe auf Reddit nachgelesen, welche Erfahrungen andere Entwickler beim Übergang von CRA zu Vite gemacht haben. Die meisten waren sich einig, dass der Prozess schwierig, aber die Mühe wert ist. Darüber hinaus habe ich mehrere Blog-Beiträge zu den Schritten gelesen, die zum Verschieben einer CRA-App auf Vite erforderlich sind, da es zu diesem Thema derzeit kein offizielles Tutorial oder keine offizielle Dokumentation gibt.
yarn remove react-scripts yarn add vite @vitejs/plugin-react --dev
und im Projektstamm
import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [react()], build: { // to output your build into build dir the same as Webpack outDir: 'build', }, server: { open: true, port: 3000, }, });
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> ❌ <link rel="icon" href="/favicon.ico" /> ✅
<body> <noscript>You need to enable JavaScript to run this app.</noscript> <div id="root"></div> <script type="module" src="/src/index.jsx"></script> </body>
yarn add vite-plugin-eslint --dev
import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; import eslintPlugin from 'vite-plugin-eslint'; export default defineConfig({ plugins: [react(), eslintPlugin()], build: { outDir: 'build', }, server: { open: true, port: 3000, }, });
<img src={require('assets/images/logo.svg')}/> ❌
import Logo from 'assets/images/logo.svg'; <img src={Logo}/> ✅
2. Auflösen globalDies ist nicht definiert.
Globale Variable „globalThis“ in einer Webpack-Anwendung
window.global ||= window; // just double checked my code and I'm a bit skeptical of why I'm not using // `window.globalThis`and why my code is working with `window.global` ?
3. Generieren Sie Quellkarten zur Fehlerüberwachung.
import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; import eslintPlugin from 'vite-plugin-eslint'; export default defineConfig({ plugins: [react(), eslintPlugin()], build: { outDir: 'build', sourcemap: true, }, server: { open: true, port: 3000, }, });
4. Korrigieren Sie globale SASS-Variablen.
//theme.scss ❌ :export { primaryColor: $app-primary; secondaryColor: $secondary; .... } import theme from '../styles/theme.scss'; <div style={{ color: theme.primaryColor }}>Hello World</div>
Wird ersetzt durch
// theme.js ✅ const theme = { primaryColor: '#10142a', secondaryColor: '#2695a2', ..... } export default theme; import theme from '../styles/theme.js'; <div style={{ color: theme.primaryColor }}>Hello World</div>
5. Behandeln Sie absolute Importe für .jsx-Dateien.
import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; import eslintPlugin from 'vite-plugin-eslint'; export default defineConfig({ plugins: [react(), eslintPlugin()], build: { outDir: 'build', sourcemap: true, }, resolve: { alias: [ { find: 'actions', replacement: '/src/actions' }, { find: 'assets', replacement: '/src/assets' }, { find: 'components', replacement: '/src/components' }, ..... { find: 'styles', replacement: '/src/styles' }, ], }, server: { open: true, port: 3000, }, });
6. Behandeln Sie absolute Importe für **.scss-Dateien.**
import MyComponent from 'components/MyComponent'; import styles from 'styles/app.scss'; <MyComponent className={styles.someClassName} />
// index.jsx import React from 'react'; import { render } from 'react-dom'; import Main from './pages/Main'; // Import SCSS globally import './global.scss'; render(<Main/>, document.querySelector('#root')); // global.scss .class1{...} .class2{...} ... // cut & paste classes from styles/app.scss here // then drop that cursed file
Dann würde ich sie wie Vanilla-CSS verwenden
<MyComponent className='someClassName' />
7. Beheben Sie Probleme mit Bibliotheken von Drittanbietern.
Der Übergang von der Create-React-App zu Vite war eine herausfordernde, aber lohnende Erfahrung. Allein die Leistungsverbesserungen haben dafür gesorgt, dass sich der Aufwand gelohnt hat, und ich glaube, dass dies sowohl die Entwicklerproduktivität als auch die allgemeine Wartbarkeit des Projekts erheblich steigern wird. Indem Sie diese Probleme sorgfältig angehen, können Sie die modernen Tools von Vite optimal nutzen und die Effizienz Ihres Entwicklungsworkflows verbessern.
Das obige ist der detaillierte Inhalt vonMigration von Create-React-App zu Vite: Steigerung der Leistung in Legacy-Anwendungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!