Create react app 修改webapck配置导入文件alias

create react app

create-react-app是 react 的官方项目脚手架,可以帮我们快速的搭建一个 react 项目。了解 vue 的同学应该知道,vue的官方脚手架是默认支持@src的绝对路径引用,可以优雅高效的引用其它模块,特别是跨目录,深嵌套的引用。而且vue把webpack的配置文件暴露出来,可以很方便的对webapck进行个性化的配置修改。相比之下,create react app生成的项目,默认还是用相对路径的引入,而且把webpack的配置深度集成到脚本里面,如果需要个性化的修改配置,只能通过react-scripts eject来导出wenpack配置,而且修改之后就只能自己维护了,一些我们不需要修改的react官方默认配置可能就会丢失。我们可以通过以下两个插件来优雅的修改create react app生成的项目配置,以修改导入路径alias为例说明。

react app rewired

react-app-rewired

  1. 安装插件

    npm install react-app-rewired --save-dev

  2. 创建 config-overrides.js

    /* config-overrides.js */

    const path = require('path');

    module.exports = {
    webpack: function(config, env) {
    config.resolve.alias['@'] = path.resolve(__dirname, 'src');
    return config;
    },
    jest: function(config) {
    const {
    moduleNameMapper = {},
    } = config;
    config.moduleNameMapper = {
    ...moduleNameMapper,
    '^@/(.*)': '/src/1',
    };
    return config;
    }
    }

  3. 修改 react-scripts 的默认npm脚本

    /* package.json */

    "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
    }

@craco/craco

@craco/craco

  1. 安装

    npm i -D @craco/craco

  2. 创建 craco-config.js 文件

    const path = require('path');

    module.exports = {
    webpack: {
    configure: (webpackConfig) => {
    webpackConfig.resolve.alias['@'] = path.resolve(__dirname, 'src');
    return webpackConfig;
    },
    },
    jest: {
    configure: (jestConfig) => {
    const {
    moduleNameMapper = {},
    } = jestConfig;
    jestConfig.moduleNameMapper = {
    ...moduleNameMapper,
    '^@/(.*)': '/src/1',
    };
    return jestConfig;
    },
    }
    };

  3. 修改 react-scripts 的默认npm脚本

    /* package.json */

    "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
    }

总结

我们可以通过 react-app-rewired@craco/craco 两个插件优雅的修改 create-react-app 生成的项目配置。两个插件的使用方法都差不多,也都可以实现我们的需求,至于使用哪一个见仁见智。我建议是用@craco/craco,比较新,react-app-rewired最后的更新已经是两年前了。

相关推荐
爱上妖精的尾巴3 分钟前
5-41 WPS JS宏 数组迭代基础测试与双数组迭代的使用方法测试
前端·javascript·wps
Tisfy8 分钟前
“豆包聊天搜索” —— 直接在Chrome等浏览器地址栏开启对话
前端·chrome·豆包
Data_agent8 分钟前
京东商品价格历史信息API使用指南
java·大数据·前端·数据库·python
大学生资源网19 分钟前
基于Vue的网上购物管理系统的设计与实现(java+vue+源码+文档)
java·前端·vue.js·spring boot·后端·源码
diudiu_3324 分钟前
XSS跨站脚本攻击
前端·xss
终极前端开发协会24 分钟前
【web前端 - 齐枭飞】乾坤【qiankun】应用,主项目与子项目交互详细代码,里面有详细代码,可直接粘贴过去 直接应用 ,
前端·前端框架·交互
闲蛋小超人笑嘻嘻39 分钟前
localStorage用法详解
前端
Swift社区43 分钟前
用 RN 的渲染模型,反推 Vue 列表的正确拆分方式
前端·javascript·vue.js
Mr_chiu43 分钟前
微前端从入门到精通:Vue开发者的大型应用架构演进指南
前端·架构
Violet_YSWY1 小时前
Vue-Pinia defineStore 语法结构
前端·javascript·vue.js