Webpack? Create React App? 不、Vite!! 〜 ④通过Create React App构建React开发环境 〜
导言
在这个“Webpack?Create React App?No、Vite!!”系列中,我们将分为5部分来探讨以下内容。
-
- 通过使用React开发环境搭建中的标题工具,理解JS中的”编译”,”打包”和”构建”
- 体验vite的技术强大和其令人惊叹的”爆速”
我正在考虑以下现状标题的选项。
①了解编译、打包和构建的概念
② 使用webpack搭建React开发环境[打包器/编译器版]
③利用Webpack搭建React开发环境[开发服务器/热模块替换版]←上回
只需要一个选择:使用Create React App搭建React开发环境
使用Vite构建React开发环境及其技术优势。
4. 通过使用Create React App来构建React开发环境
我之前做过两次webpack的开发环境搭建。即使是搭建最基本的开发环境,也需要相当多的配置。这次我们将涉及一个名为Create React App的工具,这是由Facebook(现在是Meta)开发的。但是这次我们不会进行开发环境的搭建,只是介绍一下这个工具。原因是因为Create React App已经不再是推荐的工具了。所以
本文主要介绍了Create React App这一构建工具在React开发环境搭建中的演变,但该工具已进入维护模式,不再开发新功能。本文并不推荐使用该工具。建议详细阅读下文内容以了解更多信息。
4.1. 什么是Create React App?
如先前所述,Create React App是Meta公司开发的用于轻松设置React开发环境的工具。它可以自动处理之前需要进行特别配置的构建过程。
以下是CRA的代码库中所记录的设计思想的内容。
只有一个依赖关系:只有一个构建依赖。它使用webpack,Babel,ESLint和其他令人惊叹的项目,但在它们之上提供了一个统一的精心策划的体验。
→ 虽然我在后台使用了各种工具,比如webpack,但你可以毫不费力地使用它。只需要考虑我的事情就好了。
无需配置:您无需进行任何配置。开发和生产构建的合理配置已经帮您处理好,因此您可以专注于编写代码。
→不需要写太多的设置文件了。我们集中精力写应用代码吧。
无锁定:您可以随时“弹出”到自定义设置。运行一个命令,所有配置和构建依赖项都将直接移动到您的项目中,这样您就可以从您离开的地方继续进行。
只要你能「退場」,隨時都可以自由自在地做你喜歡的事情。之後由你自己隨意安排。
像是有出息的父母一样的行为,对吧。
4.2. 简易安装
只需使用yarn、npm或npx进行初始化或执行命令即可,使用方法非常简单。
npx create-react-app my-app
如果你使用npm的话
npm init react-app my-app
如果是yarn的话
yarn create react-app my-app
只需要这样就可以在没有任何设置的情况下完成Webpack做的事情。
你在里面做什么?
我把它弹出来,稍微偷瞄一下里面。
npm run eject
然后出现了一个名为”config”的大文件夹。虽然试图仔细看会很麻烦,但如果看一下”webpack.config.js”的内容,您会发现基本上都是我们以前通过进研ゼミ所做的事情。
react-refresh和babel出现了!
const reactRefreshRuntimeEntry = require.resolve('react-refresh/runtime');
const reactRefreshWebpackPluginRuntimeEntry = require.resolve(
'@pmmmwh/react-refresh-webpack-plugin'
);
const babelRuntimeEntry = require.resolve('babel-preset-react-app');
const babelRuntimeEntryHelpers = require.resolve(
'@babel/runtime/helpers/esm/assertThisInitialized',
{ paths: [babelRuntimeEntry] }
);
正在加载CSS加载程序!
const getStyleLoaders = (cssOptions, preProcessor) => {
const loaders = [
isEnvDevelopment && require.resolve('style-loader'),
isEnvProduction && {
loader: MiniCssExtractPlugin.loader,
// css is located in `static/css`, use '../../' to locate index.html folder
// in production `paths.publicUrlOrPath` can be a relative path
options: paths.publicUrlOrPath.startsWith('.')
? { publicPath: '../../' }
: {},
},
{
loader: require.resolve('css-loader'),
options: cssOptions,
},
这是HTMLWebpackPlugin。
plugins: [
// Generates an `index.html` file with the <script> injected.
new HtmlWebpackPlugin(
Object.assign(
{},
{
inject: true,
template: paths.appHtml,
},
isEnvProduction
? {
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
}
: undefined
)
),
在实际内部运行时,它是基于进行webpack开发环境搭建时进行的配置。通过巧妙的隐藏,让使用者可以毫不费力地使用,而无需太过关注。这种无需配置的构建工具非常适应只需进行最低限度设置的需求。然而,如果需要更加灵活地进行自定义使用时,则需要进行配置“eject”以单独运行。
雖然有點早,但這次就到這裡結束吧。
下一次我們將進入「爆速」Vite的秘密世界,無比期待。