create-react-app项目配置全解析

yizhihongxing

create-react-app 项目配置全解析

create-react-app 是基于 React 的官方脚手架工具,使用 create-react-app 可以快速构建一个 React 应用,并且默认已经配置了一些开发所需的基础配置,可以省去我们自己手动配置的过程。

安装

使用 create-react-app 前需要先全局安装该工具,使用以下命令进行安装:

npm install -g create-react-app

创建项目

使用 create-react-app 创建一个项目非常简单,只需在命令行中执行以下命令:

create-react-app <项目名>

例如,创建一个名为 my-app 的项目:

create-react-app my-app

项目目录结构

执行上述命令后,create-react-app 会自动创建一个基于 React 的项目,该项目的目录结构如下:

my-app/
  README.md
  node_modules/
  package.json
  public/
    index.html
    favicon.ico
  src/
    App.css
    App.js
    App.test.js
    index.css
    index.js
    logo.svg

其中,public/ 目录存储项目入口文件和其他静态文件,src/ 目录存储项目的源代码。

配置文件

create-react-app 为我们封装了 webpack 配置,如果我们需要修改一些 webpack 的配置项,那么需要使用 eject 命令将配置文件暴露出来,并且此操作是不可逆的,执行后将不能回滚,因此在 eject 前需要确认操作。

使用以下命令执行 eject 操作:

npm run eject

执行上述命令后,create-react-app 会将隐藏的配置文件暴露出来,暴露后会多出一个名为 config 的目录,该目录中存储了 webpack 配置相关的文件。

示例说明

以下为两个配合 create-react-app 使用的示例。

示例一

假设我们现在需要在项目中引入 antd 库,我们可以使用以下命令进行安装:

npm install antd --save

安装完成后,我们需要在项目中引入该库,具体操作如下:

在 index.js 中添加以下代码:

import React from 'react';
import ReactDOM from 'react-dom';
import 'antd/dist/antd.css';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));

然后在 App.js 中使用 antd 的组件:

import React, { Component } from 'react';
import { Button } from 'antd';

class App extends Component {
  render() {
    return (
      <div>
        <Button type="primary">Button</Button>
      </div>
    );
  }
}

export default App;

示例二

假设我们需要在项目中使用 sass 预处理语言,我们可以使用以下命令进行安装:

npm install node-sass sass-loader --save-dev

安装完成后,在 config/webpack.config.js 添加以下代码:

const sassRegex = /\.scss$/,
      sassModuleRegex = /\.module\.scss$/;

// ...

// 添加 sass 和 scss 文件处理
{
    test: sassRegex,
    exclude: sassModuleRegex,
    use: [
      isEnvDevelopment && 'style-loader',
      isEnvProduction && MiniCssExtractPlugin.loader,
      {
        loader: require.resolve('css-loader'),
        options: {
          importLoaders: 2,
        },
      },
      {
        loader: require.resolve('sass-loader'),
        options: {
          implementation: require('node-sass'),
        },
      },
      {
        loader: require.resolve('postcss-loader'),
        options: {
          ident: 'postcss',
          plugins: () => [
            require('postcss-flexbugs-fixes'),
            autoprefixer({
              flexbox: 'no-2009',
            }),
          ],
        },
      },
    ].filter(Boolean),
},
{
    test: sassModuleRegex,
    use: [
      isEnvDevelopment && 'style-loader',
      isEnvProduction && MiniCssExtractPlugin.loader,
      {
        loader: require.resolve('css-loader'),
        options: {
          importLoaders: 2,
          modules: {
            getLocalIdent: getCSSModuleLocalIdent,
          },
        },
      },
      {
        loader: require.resolve('sass-loader'),
        options: {
          implementation: require('node-sass'),
          sassOptions: {
            modules: true,
          },
        },
      },
      {
        loader: require.resolve('postcss-loader'),
        options: {
          ident: 'postcss',
          plugins: () => [
            require('postcss-flexbugs-fixes'),
            autoprefixer({
              flexbox: 'no-2009',
            }),
          ],
        },
      },
    ].filter(Boolean),
},

添加完成后,我们可以在项目中使用 scss 文件了,例如在 App.js 中添加以下代码:

@import './App.module.scss';

.App {
  font-family: sans-serif;
  text-align: center;
}

$font-size: 32px;

.App-logo {
  animation: App-logo-spin infinite 20s linear;
  height: $font-size;
  margin-top: $font-size;
}

.App-header {
  background-color: #282c34;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: calc(10px + 2vmin);
  color: white;
}

@media (prefers-reduced-motion: no-preference) {
  .App-logo {
    animation: App-logo-spin infinite 20s linear;
  }
}

.App-link {
  color: #61dafb;
}

@keyframes App-logo-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

$primary-color: #1890ff;

.Button {
  background: $primary-color;
  border: none;
  color: #fff;
  padding: 10px 20px;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background: lighten($primary-color, 10%);
  }
}

注意:如果修改了以上配置后,需要重新执行 npm start 才能生效。

参考

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:create-react-app项目配置全解析 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js格式化输入框内金额、银行卡号

    下面将详细讲解如何使用JavaScript实现格式化输入框内金额、银行卡号的功能。 格式化输入框内金额 在实现格式化输入框内金额的功能中,一般遵循以下步骤: 给输入框绑定keyup或input事件,监听输入框内的值。 在事件回调函数中获取输入框内的值,并将其进行格式化处理。 根据处理后的值,更新输入框内的内容。 下面是一个代码示例: <input id…

    JavaScript 2023年6月11日
    00
  • 原生js实现密码强度验证功能

    密码强度验证是一种常用的前端表单验证功能,实现起来并不复杂。下面是使用原生JS实现密码强度验证的攻略: 1. 分析实现思路 实现密码强度验证的关键是定义密码强度的级别和判断密码的强度。一般情况下,密码强度可以分为“弱”、“中”和“强”三个等级,判断密码的强度需要根据密码的长度、包含的字符类型、是否包含特殊字符等多个因素来综合评估。 2. 编写HTML代码 &…

    JavaScript 2023年6月10日
    00
  • 大幅提升前端工作效率!Numeral.js数值格式化库来了!

    我们日常开发中,时常会碰到数值格式化操作的场景,今天了不起就为大家分享一款相对比较全面的数值格式化的JS库:Numeral.js Numeral.js Numeral.js 是一个用来对数值进行操作和格式化的 JS 库。可将数字格式化为货币、百分比、时间,甚至是序数词的缩写(比如1st,100th)。 安装 下载到本地引入 <script src=”n…

    JavaScript 2023年5月10日
    00
  • 关于取不到由location.href提交而来的上级页面地址的解决办法

    在 JavaScript 代码中,可以使用 document.referrer 获取到引用当前页面的上级页面的地址,但是无法获取由 location.href 提交而来的上级页面的地址。在这种情况下,需要通过其他方式解决。 一种可行的解决方法是在跳转链接的时候,将上级页面的地址作为参数传递到跳转的页面中。具体实现步骤如下: 在跳转链接中添加参数 <a …

    JavaScript 2023年6月11日
    00
  • JS前端可视化canvas动画原理及其推导实现

    JS前端可视化canvas动画原理及其推导实现 1. 什么是Canvas Canvas是HTML5提供的一个标签,它是一个可以用JavaScript绘制图形的区域,它可以用来绘制各种图形、动画以及游戏等。 2. Canvas动画原理 Canvas动画是通过更新图形的位置和状态来展现动态效果的。因此,我们只需要通过JavaScript来控制图形的位置和状态,然…

    JavaScript 2023年6月10日
    00
  • Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    JQuery是一种JavaScript库,其中包括了许多有用的工具方法,其中包括四种数据请求方法:$.get(), $.post(), $.ajax(), $.getJSON()。以下是它们的详细讲解: $.get(url, data, success, dataType) url:请求的URL地址 data:发送给服务器的数据(可以省略) success:…

    JavaScript 2023年5月19日
    00
  • javascript电商网站抢购倒计时效果实现

    让我来详细讲解一下“JavaScript电商网站抢购倒计时效果实现”的完整攻略。 一、了解倒计时的基本原理 在实现电商网站的抢购倒计时效果之前,我们需要先了解倒计时的基本原理,以便于后续的代码实现。 倒计时的基本原理是利用 JavaScript 中的定时器(setTimeout 或 setInterval)来不断地更新倒计时显示的时间,实现倒计时效果。 具体…

    JavaScript 2023年6月10日
    00
  • JavaScript获取对象key的几种方法和区别

    下面是关于“JavaScript获取对象key的几种方法和区别”的详细讲解。 1. 对象属性的基本概念 在 JavaScript 中,对象是指一个或多个属性的集合。一个属性包括一个名字和一个值,名字通常称之为属性名或 key,它可以是一个字符串或者一个 Symbol(ES6中的一种数据类型)。 我们可以通过以下方式定义一个对象: const obj = {k…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部