私の職場で create-react-app (CRA) から Vite への移行が成功したことを共有できることを嬉しく思います。 ?
切り替えは簡単ではありませんでしたが、必要でした。私たちのアプリはますます遅くなり、開発者エクスペリエンス (DX) が低下していました。アプリの再起動が非常に遅いため、ノートパソコンを一日中オンにしたままになっていました。 node_modules を削除して再インストールし、アプリを起動しようとした場合、すべてがダウンロードされて再び起動するまで待つだけで 1 時間無駄になる可能性があります。アプリの起動には通常 12 ~ 15 分かかりますが、特に緊急のバグ レポートに対処する場合には大幅な遅れが生じます。さらに、CRA は非推奨となり、React アプリケーションのブートストラップには推奨されなくなりました。
なぜ Vite?
当初、私は次のように宣伝されている Rspack の使用を検討しました
より強力な機能と優れた生産性を備えた、Webpack のドロップイン代替品。
しかし、移行は私が期待していたほどスムーズではありませんでした。 Rspack は運用準備が整いつつありますが (この記事の執筆時点ではバージョン 1.0.0-beta.4)、私はより成熟し、実戦テスト済みのソリューションである Vite を選択することにしました。
Webpack と CRA から離れたことで、これらのツールとその背後にある努力に対する新たな感謝の気持ちが生まれました。これらは開発プロセスの大部分を簡素化し、すぐに使用できるセットアップを提供します。
いつか CRA や Webpack に代わる真のドロップイン機能が登場し、Vite などのツールに切り替えるときに大規模なファイル変更を行う必要がなくなることを願っています。
Webpack、Vite、または Rspack が何なのかわからない場合は、前回の投稿でこのウサギの穴を掘り下げ、Webpack とその機能について調べました。 Vite と Rspack は、同様の仕事を行う最新のツールですが、より効率的です。
古いアプリを Vite に移行する方法を説明する前に、開発環境と運用環境で Vite を使用した短い経験の中で遭遇した長所と短所を共有したいと思います。
注: 私がテストしているラップトップはかなり古いものです。より良いスペックを備えた新しいマシンでは、2 回目の起動の起動時間は 20 ~ 30 秒ほどでした。
Webpack を使用する
ヴィテ付き
これは最も重要なステップです。広範な調査が不可欠です。私は Reddit を閲覧して、CRA から Vite に移行した他の開発者の経験について読みました。ほとんどの人が、このプロセスは難しいが、努力する価値があることに同意しました。さらに、CRA アプリを Vite に移行するために必要な手順に関するいくつかのブログ投稿を読みました。これは、このトピックに関する公式のチュートリアルやドキュメントが現在存在しないためです。
yarn remove react-scripts yarn add vite @vitejs/plugin-react --dev
そしてプロジェクトルート内
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. Resolve globalこれは定義されていません。
Webpack アプリケーションのグローバル変数「globalThis」
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.エラー監視用のソース マップを生成します。
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.グローバル SASS 変数を修正します。
//theme.scss ❌ :export { primaryColor: $app-primary; secondaryColor: $secondary; .... } import theme from '../styles/theme.scss'; <div style={{ color: theme.primaryColor }}>Hello World</div>
に置き換えられます
// 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. .jsx ファイルの絶対インポートを処理します。
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. **.scss ファイルの絶対インポートを処理します。**
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
それなら、バニラ CSS のように使用します
<MyComponent className='someClassName' />
7.サードパーティのライブラリの問題に対処します。
create-react-app から Vite への移行は、困難ではありましたが、やりがいのある経験でした。パフォーマンスの向上だけでも努力の価値はあり、これにより開発者の生産性とプロジェクト全体の保守性の両方が大幅に向上すると信じています。これらの問題に慎重に対処することで、Vite の最新ツールを最大限に活用し、開発ワークフローの効率を向上させることができます。
以上がCreate-React-App から Vite への移行: レガシー アプリケーションのパフォーマンスの向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。