我很高兴与大家分享,我们在我的工作场所成功从 create-react-app (CRA) 过渡到 Vite! ?
切换并不简单,但却是必要的。我们的应用程序变得越来越缓慢,开发人员体验 (DX) 也在恶化。我发现自己整天都开着笔记本电脑,因为重新启动应用程序的速度非常慢。如果您删除了node_modules,重新安装了它们,并尝试启动应用程序,您可能会浪费一个小时来等待所有内容下载并再次启动。该应用程序通常需要 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 的短暂经验中遇到的优缺点。
注意:我正在测试的笔记本电脑相当旧。在规格更好的新机器上,第二次启动的启动时间低至 20-30 秒。
使用 Webpack
与Vite
这是最关键的一步。广泛的研究是必要的。我浏览 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。解决 全局这个没有定义。
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中文网其他相关文章!