如果想修改create-react-app中的webpack配置,除了使用eject命令暴力破意外,还可以使用第三方库react-app-rewired进行修改。但是这个库只提供了config-overrides.js配置文件,修改起来比较麻烦,下面提供一系列函数来修改config-overrides.js配置文件。

customize-cra利用react-app-rewired的配置文件config-overrides.js,你只要引入改库,就可以重写config-overrides.js里的方法。

文档中的所有方法都由customize-cra导出,原文地址

1.addBabelPlugin(plugin)

添加一个babel插件。无论给plugin 参数传递什么,都会将你传递的参数添加到Babel的plugins数组中。查阅react-app-rewired资料了解更多。

注意:这个方法不会将参数添加到yarn test的Babel配置中。可以查看useBabelRc()了解更多。

2.addBabelPlugins(plugins)

一个简单的帮助函数,可以允许你传递plugin多个参数。使用的使用必须写成...扩展操作符,例如:

module.exports = override(disableEsLint(),...addBabelPlugins("polished","emotion","babel-plugin-transform-do-expressions"),fixBabelImports("lodash", {libraryDirectory: "",camel2DashComponentName: false}),fixBabelImports("react-feather", {libraryName: "react-feather",libraryDirectory: "dist/icons"})
);

3.addBabelPreset(preset)

添加一个babel的预设。无论你给preset参数传递什么,都会将其添加到Babel的preset数组中,查阅react-app-rewired资料了解更多

注意:这个方法不会将参数添加到yarn test的Babel配置中。可以查看useBabelRc()了解更多。

2.addBabelPresets(…presets)

一个简单的帮助函数,可以允许你传递presets多个参数。使用的使用必须写成...扩展操作符,例如:

module.exports = override(...addBabelPresets(["@babel/env",{targets: {browsers: ["> 1%", "last 2 versions"]},modules: "commonjs"}],"@babel/preset-flow","@babel/preset-react")
);

4.babelInclude

如果需要编译 node_modules文件夹下的一个模块,可以用此方法重写babel loader的include选项,

module.exports = override(babelInclude([path.resolve("src"), // make sure you link your own sourcepath.resolve("node_modules/native-base-shoutem-theme"),path.resolve("node_modules/react-navigation"),path.resolve("node_modules/react-native-easy-grid")])
);

5.fixBabelImports(libraryName, options)

添加一个 babel-plugin-import plugin. 详情查看.

6.addDecoratorsLegacy()

在传统模式中添加装饰器,请确保已经安装了@babel/plugin-proposal-decorators

7.useBabelRc()

使用.babelrc文件来配置Babel

6.disableEsLint()

Does what it says. You may need this along with addDecoratorsLegacy in order to get decorators and exports to parse together.

如果要使用Eslint的@babel/plugin-proposal-decorators插件,请按照下面的配置卸载.eslintrc文件或package.json文件中。

{"extends": "react-app","parserOptions": {"ecmaFeatures": {"legacyDecorators": true}}
}

7.useEslintRc(configFile)

激活你的.eslintrc文件,而不使用CRA提供的

configFile是一个可循啊参数,你可以通过它来指定Eslint配置文件的路径。

8.enableEslintTypescript()

更新eslint-loader,可以让.js(x).ts(x)文件展示eslint的提示

9.addWebpackAlias(alias)

向webpack别名(alias)区域添加别名,传递一个对象,并将其合并到项目中

10.addWebpackResolve(resolve)

向webpack的resolve区域添加你传递的resolve,传递一个对象,并将其合并到项目中

11.addWebpackPlugin(plugin)

向webpackplugin数组中添加已提供的plugin,使用new webpack.DefinePlugin({...})方法传递一个定义好的plugin

12.addWebpackExternals(deps)

添加额外external依赖,如果使用CDN整个方法就很有用了

你可以参考react and react-dom 提供的例子 offload

addWebpackExternals({react: "React","react-dom": "ReactDom"
});

addWebpackExternals 也可以接收string,function, 或 regex(正则),详情查看the webpack documentation

13.addBundleVisualizer(options, behindFlag = false)

向webpack配置中添加bundle visualizer plugin(一个web生成工具,图形化的工具,用来分析打包后的bundle.js文件)。

使用前要安装webpack-bundle-analyzer,一般情况传入以下配置就可以

{"analyzerMode": "static","reportFilename": "report.html"
}

你可以在命令后面添加一个标志--analyze true来隐藏这个插件

addBundleVisualizer({}, true);

14.useBabelRc()

激活.babelrc (或 .babelrc.js)文件,如果你想覆盖CRA的配置就会非常有用,

Causes your .babelrc (or .babelrc.js) file to be used, this is especially useful
if you’d rather override the CRA babel configuration and make sure it is consumed
both by yarn start and yarn test (along with yarn build).

// config-overrides.js
module.exports = override(useBabelRc()
);// .babelrc
{"presets": ["babel-preset-react-app"],"plugins": ["emotion"]
}
{analyzerMode: "static",reportFilename: "report.html"
}

这样就可以通过可选参数来覆盖了

15.adjustWorkbox(fn)

调整工具箱配置。传递一个函数让工具箱配置调用,你可以根据需要改变config对象,例子如下:

adjustWorkbox(wb =>Object.assign(wb, {skipWaiting: true,exclude: (wb.exclude || []).concat("index.html")})
);

16.addLessLoader(loaderOptions)

首先,要安装lessless-loader

yarn add less
yarn add --dev less-loader

或者:

npm i less
npm i -D less-loader

安装完成后按照下面的方法在override中调用addLessLoader

const { addLessLoader } = require("customize-cra");module.exports = override(addLessLoader(loaderOptions));

loaderOptions 是可选参数. 如果需要特殊配置就可以用它,例如:

const { addLessLoader } = require("customize-cra");module.exports = override(addLessLoader({strictMath: true,noIeCompat: true,localIdentName: "[local]--[hash:base64:5]" // 如果使用了CSS模块,并且自定义了localIdentName,默认值是'[local]--[hash:base64:5]'})
);

查阅Less的文档进行相关配置

一旦使用了 less-loader,就可以通过import.less文件的方式了

.module.less 会使用CSS Modules

如果要使用TypeScript(npm init react-app my-app --typescript),就要编辑react-app-env.d.ts

declare module "*.module.less" {const classes: { [key: string]: string };export default classes;
}

17.disableChunk

禁止默认的静态片段,将整个build文件构建到一个文件中。查看this thread了解更多

18.Using the plugins

要使用这些插件,请导入override函数,并且调用你想调用的插件。每个调用都会返回一个新函数,override函数就会调用新的config对象,错误值直接忽略,因此要想有条件的使用这些插件,可以按照如下方式:

const {override,addDecoratorsLegacy,disableEsLint,addBundleVisualizer,addWebpackAlias,adjustWorkbox
} = require("customize-cra");
const path = require("path");module.exports = override(addDecoratorsLegacy(),disableEsLint(),process.env.BUNDLE_VISUALIZE == 1 && addBundleVisualizer(),addWebpackAlias({["ag-grid-react$"]: path.resolve(__dirname, "src/shared/agGridWrapper.js")}),adjustWorkbox(wb =>Object.assign(wb, {skipWaiting: true,exclude: (wb.exclude || []).concat("index.html")}))
);

19.removeModuleScopePlugin()

这个方法会移除CRA的插件来防止从src意外的文件夹导入模块,如果使用不同的文件夹这个方法就非常有用

一个常见的列子:如果你使用了CRA的monorepo设置,你的代码就会在 packages/下而而不是src/目录下
A common use case is if you are using CRA in a monorepo setup, where your packages
are under packages/ rather than src/.

20.MobX 用户

如果想在CRA2中使用MobX,请使用addDecoratorsLegacydisableEsLint.

20. 覆盖 dev server 配置

要覆盖dev server配置,可以使用overrideDevServer对象

const {override,disableEsLint,overrideDevServer,watchAll
} = require("customize-cra");module.exports = {webpack: override(// usual webpack plugindisableEsLint()),devServer: overrideDevServer(// dev server pluginwatchAll())
};

21.watchAll()

一旦启用,CRA就会监听项目的所有文件,包括node_modules文件夹里的。

使用它只要在运行时使用yarn start --watch-all命令就可以

watchAll();

22.添加post-css插件

使用addPostcssPlugins可以添加post-css插件

const { override, addPostcssPlugins } = require("customize-cra");module.exports = override(addPostcssPlugins([require("postcss-px2rem")({ remUnit: 37.5 })])
);

23.addTslintLoader(loaderOptions)

需要安装 tslint-loader.

const { addTslintLoader } = require("customize-cra");module.exports = override(addTslintLoader());

24.addExternalBabelPlugin(plugin)

create-react-app 中存在两种配置babel-loader规则:

  1. addSrc中(默认情况下是src/
  2. external,像node_modules文件夹,你可以使用addExternalBabelPluginexternal中添加插件,同样的,也可以用addBabelPlugin

25.addExternalBabelPlugins(plugins)

A simple helper that calls addExternalBabelPlugin for each plugin passed.

Note: Make sure to use the spread operator if adding multiple plugins.

module.exports = override(disableEsLint(),...addExternalBabelPlugins("babel-plugin-transform-do-expressions","@babel/plugin-proposal-object-rest-spread",),fixBabelImports("lodash", {libraryDirectory: "",camel2DashComponentName: false}),fixBabelImports("react-feather", {libraryName: "react-feather",libraryDirectory: "dist/icons"})
);

react:customize-cra修改webpack配置相关推荐

  1. 修改webpack配置,在react中使用less

    LESS是一个CSS预处理器,比如antD就是基于LESS的. 要在react中使用LESS,需要暴露webpack配置并进行修改,同时安装less和less-loader. 当然网上可以找到很多教程 ...

  2. React 不用eject下修改webpack配置实现alisa

    使用 customize-cra 和 react-app-rewired 对React项目进行webpack配置的注入 yarn add customize-cra react-app-rewired ...

  3. react修改webpack配置,添加别名

    第一种方式 通过 npm run eject 直接暴露出来react所有的webpack配置文件,暴露出来之后,过程不可逆 而且失去了 react-scripts 的统一管理的好处,而且react的w ...

  4. 不暴露 create react app 的webpack配置下,修改webpack配置

    使用 react-app-rewired react-app-rewired 传送门 安装 react-app-rewired npm install react-app-rewired --save ...

  5. webpack多个Html,少量修改webpack配置支持打包多页面

    webpack一般是配合单页面应用使用,但并不是所有的web应用都是单页的,有多个页面的情况还是很多的,当然你可以用其它的构建工具来打包,但对于习惯了webpack的你来说,要是能直接在webpack ...

  6. React项目搭建及环境配置

    React 脚手架 create-react-app 为了快速地进行构建使用 React 的项目,FaceBook 官方发布了一个无需配置的.用于快速构建开发环境的脚手架工具 create-react ...

  7. react 文件 md5_从零配置webpack 4+react脚手架(二)

    前言: 你可能也注意到了,html文件中的关于js的引用是我们手动写的,那假如我们改了输出路径或打包编译之后的文件名,那我们岂不是还要手动去修改html文件中的引用?我们怎么做到,像create-re ...

  8. 使用webpack配置react并添加到flask应用

    学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...

  9. 教你webpack、react和node.js环境配置(上篇)

    很多人刚学习react的时候,往往因为繁琐的配置而头疼,这里我将手把手教大家怎么用webpack配置react和redux的环境,这篇教程包括前端react和后台node整个网站的环境配置,对node ...

  10. react webpack配置

    react webpack配置 接上期 webpack的基础配置 同样附上个人git仓库地址:https://gitee.com/zhaosir1/webpack-base-react-cli.git ...

最新文章

  1. Android 6.0 运行时权限处理完全解析
  2. VR中的白帽机制,这把安全的双刃剑应该如何使用?
  3. iOS - OC 与 C 互相操作
  4. SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
  5. 用户自定义排序的几种实现思路
  6. Automative SPICE 之五 过程能力层次和过程属性
  7. 桌面虚拟化的技术演变发展史
  8. Linux 中的 nl 命令详解及C/C++代码实现(文件行数)
  9. html让视频变形不留黑边,视频去黑边画面不变形|视频无损去黑边 去掉视频黑边且画面比例正常人物不变形...
  10. No.7软件需求规格说明书及UML
  11. 淘宝联盟扣分54分流量异常申诉成功
  12. 【PTA】【C语言】复盘练习——编程题
  13. 畅言多媒体教学系统软件简析
  14. Error: No such container:path: 630f5b9a1a00d26975cd4fda3464af0829bbfb1f21c1e30238fec7c11eed609d:/var
  15. xp看不到win7共享计算机,WIN7与XP之间共享互通的错误以及解决办法汇总
  16. delegate与event的区别
  17. QA:PTCRB认证、PTCRB报告、美国运营商准入认证、国际认证
  18. 强化学习中状态价值函数和动作价值函数的理解
  19. 2019_AAAI_Hypergraph neural networks
  20. eclipse插件MemoryAnalyzer

热门文章

  1. Unreal 蓝图工具 spline 道路组件
  2. HTML---表格table标签中thead、tbody、tfoot的作用
  3. 小强统一认证中心开源介绍
  4. (转)人工智能公司Kensho是如何改变华尔街的?
  5. [已解决]VitrualBox 启动linux虚拟机后,无法访问网络解决方法
  6. luogu P5560 [Celeste-B]Golden Feather
  7. Google 广告考试试题
  8. 基于51单片机MAX31865的PT100铂电阻测温设计
  9. 小米为何要死磕某国产手机企业?这是多年被压迫下的反击
  10. Win10系统异常应该怎么修复