CRA应用使用craco实现webpack配置+module.less+src别名配置

news2024/11/17 9:36:42

前言:总所周知,create-react-app 是目前最受欢迎的创建 React 应用的手脚架之一,下面简称CRA;CRA 最推荐更改 webpack 配置的当属使用 craco,下面我们一起来看看配置吧。

一、创建 cra 应用

npx create-react-app my-app --template typescript
cd my-app
npm start

二、安装和配置 craco

  • 为什么使用craco
    使用create-react-app 创建的项目默认是无法修改其内部的webpack配置的,不像vue-cli那样可以通过一个配置文件修改。
    虽然有一个eject 命令可以是将配置完全暴露出来,但这是一个不可逆的操作,同时也会失去CRA带来的便利和后续升级。
    如果想要无 eject 重写 CRA 配置,目前成熟的是下面这几种方式
    1. 通过 CRA 官方支持的 --scripts-version 参数,创建项目时使用自己重写过的 react-scripts 包
    2. 使用 react-app-rewired + customize-cra 组合覆盖配置
    3. 使用 craco 覆盖配置
  1. 安装 craco 依赖
yarn add @craco/craco
or 
npm i @craco/craco
  1. 修改pacage.json中的启动脚本命令,找到 pacage.json 文件的 scripts 项修改
  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },
  1. 在项目根目录创建craco.config.js配置文件【这里的配置包括下面用到的,以及代码混淆配置,打包输出的一些简单配置等,仅供参考】
const path = require("path");
const addPath = (dir) => path.join(__dirname, dir);
const CracoLessPlugin = require("craco-less");
const { name } = require("./package.json");
const WebpackObfuscator = require("webpack-obfuscator");
const { whenProd } = require("@craco/craco");
// const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");

const PORT = 9000;
let HOST = "127.0.0.1";
const publicPath = {
  development: `http://${HOST}:${PORT}`,
  production: `https://xxxxx/${name}`,
};

module.exports = {
  devServer: {
    port: PORT,
    client: {
      webSocketURL: {
        hostname: HOST,
      },
    },
  },
  webpack: {
    alias: {
      "@": addPath("src"),
    },
    configure: {
      output: {
        publicPath: publicPath[process.env.NODE_ENV] + "/",
        library: `${name}-[name]`,
        libraryTarget: "umd",
        chunkLoadingGlobal: `webpackJsonp_${name}`,
      },
      module: {
        rules: [
          ...whenProd(() => {
            return [
              {
                test: /\.(js|ts)$/,
                enforce: "post",
                use: [
                  {
                    loader: WebpackObfuscator.loader,
                    options: {
                      compact: false,
                      controlFlowFlattening: true,
                      controlFlowFlatteningThreshold: 1,
                      numbersToExpressions: true,
                      simplify: true,
                      shuffleStringArray: true,
                      splitStrings: true,
                      stringArrayThreshold: 1,
                      stringArrayEncoding: ["base64"],
                    },
                  },
                ],
                include: [path.resolve(__dirname, "src/api")],
              },
            ];
          }, []),
        ],
      },
    },
    // plugins: [
    //   new BundleAnalyzerPlugin({
    //     analyzerMode: "server",
    //     analyzerHost: "127.0.0.1",
    //     analyzerPort: 8888,
    //     openAnalyzer: true, // 构建完打开浏览器
    //     reportFilename: path.resolve(__dirname, `analyzer/index.html`),
    //   }),
    // ]
  },
  plugins: [
    {
      plugin: CracoLessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
            modifyVars: {},
            javascriptEnabled: true,
          },
        },
      },
    }
  ]
};

三、配置别名

  1. 上面的craco.config.js --> webpack --> alias 已经配置
  2. 然后,我们配置 ts,找到 tsconfig.json 加入
    "paths": {
      "@/*": ["src/*"]
    },

在这里插入图片描述

四、配置 module.less

  1. 安装less和craco-less
yarn add less craco-less
or
npm i less craco-less
  1. craco-less 插件 配置,上面 craco.config.js 已配置,具体代码如下
const CracoLessPlugin = require("craco-less");

module.exports = {
  plugins: [
    {
      plugin: CracoLessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
            modifyVars: {},
            javascriptEnabled: true,
          },
        },
      },
    }
  ]
};
  1. 进行类型声明,找到 react-app-env.d.ts 文件
/// <reference types="react-scripts" />

declare module "*.module.less" {
  const classes: Record<string, string>;
  export default classes;
}
declare module "*.less" {
  const classes: Record<string, string>;
  export default classes;
}

五、总结

至此已经轻松的配置完基于 cra 脚手架应用,使用 craco 实现【module less + 别名配置 + 代码混淆配置】的基本配置,各位亲爱的粉丝可以动手实践吧,有问题评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全国标杆!3DCAT实时云渲染助力深圳移动5G+智慧校园建设

2023年2月27日&#xff0c;中国移动在陕西西安召开全国教育行业全年工作部署暨电子学生证专项调度会&#xff0c;来自全国各地的移动分公司、专家、合作伙伴等参加了会议。瑞云科技旗下3DCAT实时渲染云作为中国移动的重要合作伙伴之一&#xff0c;也受邀出席进行项目展示。 在会…

算法修炼之练气篇——练气五层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

WooCommerce电商开发:高性能订单存储(即将成为)新常态

要创建免费网站&#xff1f;从易服客建站平台免费开始 500M免费空间&#xff0c;可升级为20GB电子商务网站 创建免费网站 WooCommerce电商开发&#xff1a;高性能订单存储&#xff08;即将成为&#xff09;新常态 发布于 2023年3月30日 自2022年1月以来&#xff0c;我们一…

【企业信息化】第5集 免费开源ERP: Odoo 16 inventory仓库管理系统 现代化线上仓库管理软件

文章目录 前言一、概览二、硬件1.设置2.移动扫描仪3.USB / 蓝牙4.标签打印机5.体重秤 三、总结 前言 现代化线上仓库管理软件。 一、概览 提高业绩&#xff0c;缩短处理时间 通过复式分录智能库存系统更好地整理您的仓库。 获得最高效的存货方法并改善您的全部内部运营。Odoo…

2023年深圳/东莞/惠州CPDA数据分析师认证报名到哪里?

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

介绍 std::vector 的 operator[]

介绍 std::vector::operator[] 操作符只能 访问指定的元素 std::vector<T,Allocator>::operator[] ------------------------------------- reference operator[]( size_type pos ); //(until C20) constexpr reference operator[]( size_type po…

【广州华锐互动】3D可视化技术提升城市规划效率,打造智慧城市

城市规划是一个复杂而又多变的过程&#xff0c;需要考虑众多因素&#xff0c;如地形、气候、经济、人口等。传统的城市规划信息展示方式主要是通过平面图、立面图等二维图像来呈现城市规划的方案和效果&#xff0c;难以全面展示城市规划信息的空间特征和复杂性。 利用3D可视化…

你真的会性能测试吗?性能测试需求分析,从业务到数据(详细)...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 产品需求 业务场…

MFC二维码生成,libqrencode——小白级

直接使用&#xff1a;下载我编译好的库-链接-&#xff0c;直接跳转到使用库那一步 两个工程打包链接 ——下载 先上最终效果&#xff1a; ​​ 二维码生成&#xff0c;参考&#xff1a; 跳转链接 一、 libqrencode库编译 libqrencode是一个日本人写的的库&#xff0c;库在这…

自学黑客(网络安全)看这篇就够了

写了这么多编程环境和软件安装的文章&#xff0c;还有很多小伙伴在后台私信说看不懂。我都有点头疼了&#xff0c;但是小伙伴们求学的心情我还是能理解&#xff0c;竟然这么多人给我反馈了&#xff0c;那我就再写一篇网络安全自学的教程吧&#xff01;大家耐心看完&#xff0c;…

Fidder 抓iPhone Andorra包 教程 解决证书过期问题

1. 下载Fidder 链接&#xff1a;https://pan.baidu.com/s/12xgEU8YyE-CfWMbPIWqWMw?pwdfhxh 2.设置Fidder 3. 手机设置代理并安装证书 首先 windows r 键 输入cmd 输入 ipconfig 查看本机的IPv4地址 然后设置手机网络的HTTP代理。之后在iPhone上用Safari访问 ipv4地址:888…

【mysql】2003-Can‘t connect to MySQL server on “XX.XX.XX.XX“ (10060 unknow error)

使用navicat或者其他数据库管理工具连接远程mysql服务器时出现2003-Can’t connect to MySQL server (10060 unknow error)错误 经过排查时发现是防火墙的问题&#xff0c;OK&#xff01;那么下面写一下处理的过程 1、查看防火墙的状态 systemctl status firewalld 2、 开放…

MySQL基础(二十九)数据库的设计规范

1 范式 1.1 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。可以理解为&#xff0c;一张数据表的设计结 构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 1.2 范式都包括哪些 目…

连接器行业最新状况:竞争充分,行业集中度不断提升

随着应用领域不断扩展&#xff0c;连接器产业逐渐发展成为产品种类齐全、品种规格丰富、专业方向细分、行业特征明显、标准体系规范、系列化及专业化的行业。 连接器行业是充分竞争的行业&#xff0c;行业集中度不断提升 连接器行业具有市场全球化和分工专业化的特征&#xf…

VMware Aria Suite Lifecycle 8.12 - 应用生命周期管理

VMware Aria Suite Lifecycle 8.12 - 应用生命周期管理 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-suite-lifecycle/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 应用生命周期管理 VMware Aria Suit…

Vue中组件之间通信的-六大方式-总结

方式一&#xff1a;props/$emit 父组件向子组件传值 通过一个例子&#xff0c;说明父组件如何向子组件传递值&#xff1a;在子组件Users.vue中如何获取父组件App.vue中的数据 users:["Henry","Bucky","Emily"] 注&#xff1a;父组件通过props向…

【企业信息化】第8集 免费开源ERP: Odoo 16 Purchase采购管理 改善您的供应链和库存绩效

文章目录 前言一、概览二、主要功能1.自动化采购流程2.供应商价目表和产品库存3.通过采购招标获得最佳要约4.获取采购情况的统计数据5.管理多家公司6.全面地 集成 于其他 Odoo 的应用 总结 前言 轻松管理供应商和采购订单&#xff0c;改善您的供应链和库存绩效。 一、概览 二、…

【极验黑科技】文生图大模型在极验人机对抗领域的应用

自极验于2013年开创性地提出新一代的智能验证码概念开始&#xff0c;就始终在人机对抗领域不停地升级迭代。极验全球首创的“行为式验证”在十多年来&#xff0c;为全球近40万的开发者使用。如小米、新浪微博、东方航空、国家工商局等企业携手极验验证码进行升级&#xff0c;使…

4.AI人工智能大模型汇总:类GPT系列模型、模型中转站Auto-GPT、多模态大模型、视觉模型、自然语言模型

AI人工智能大模型汇总:类GPT系列模型、模型中转站Auto-GPT、多模态大模型、视觉模型、自然语言模型 模型名称发布方类型开源类型原始模型框架paddle版本模型能力模型语言模型参数简介模型链接体验链接paddle版本链接项目链接备注发布日期创建人模型星火认知大模型科大讯飞语言…

RecyclerView使用示例(瀑布流)

RecyclerView使用示例 效果图代码示例ShopFragment.java&#xff08;显示RecyclerView的Fragment&#xff09;fragment_shop.xml&#xff08;相对应的xml文件&#xff09;GoodsData.java&#xff08;数据源&#xff09;GoodsAdapter.java&#xff08;适配器类&#xff09;adapt…