首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将React-app-rewired与Customize-CRA集成

如何将React-app-rewired与Customize-CRA集成
EN

Stack Overflow用户
提问于 2019-04-01 13:00:41
回答 3查看 11.2K关注 0票数 12

我想通过react-app-rewired重写Webpack的配置。但是我使用Ant设计我的项目,所以我必须使用Customize-CRA来导入Babel插件等。

React-app-rewired的config-overrides.js如下所示:

代码语言:javascript
复制
module.exports = function override(config, env) {
  config.module.rules = config.module.rules.map(rule => {
        if (rule.oneOf instanceof Array) {
            return {
                ...rule,
                oneOf: [
                    {
                        test: /\.(svg|png|jpg|jpeg|gif|bmp|tiff)$/i,
                        use: [
                            {
                                loader: 'file-loader',
                                options: {
                                    name: '[path][name]-[hash:8].[ext]'
                                }
                            }
                        ]
                    },
                    ...rule.oneOf
                ]
            };
        }

        return rule;
    });

  return config;
}

Customize-CRA的config-overrides.js如下:

代码语言:javascript
复制
const {override, fixBabelImports, addLessLoader, addDecoratorsLegacy, disableEsLint} = require('customize-cra');

module.exports = override(
  addDecoratorsLegacy(),
  disableEsLint(),
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: true,
  }),
  addLessLoader({
    javascriptEnabled: true,
    modifyVars: {'@primary-color': '#a50052'},
  }),
);

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-06-11 07:23:58

我想我遇到了和你一样的问题。customize-cra覆盖将任意数量的覆盖函数作为参数。每个函数都被赋予config作为其第一个参数。可以把它想象成一个组合函数。获取您现有的覆盖导出,将其放入您定义的函数中,我调用myOverrides或其他函数,然后将customize-cra的覆盖与您的覆盖函数一起导出为其中一个参数。

之前:

代码语言:javascript
复制
module.exports = function override(config, env){
  // do stuff to config
  return config
}

之后:

代码语言:javascript
复制
function myOverrides(config) {
  // do stuff to config
  return config
}

module.exports = override(
  myOverrides,
  addDecoratorsLegacy(),
  disableEsLint(),
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: true,
  }),
  addLessLoader({
    javascriptEnabled: true,
    modifyVars: {'@primary-color': '#a50052'},
  }),
);
票数 19
EN

Stack Overflow用户

发布于 2019-05-24 17:45:25

将react-app-rewired config放在customize-cra之后,对我很有效。如果我将一个对象分配给config,它就不能工作,但如果我逐行修正config,它就能工作。我相信有一个更优雅的解决方案。

代码语言:javascript
复制
module.exports = function override(config, env) {
    const APP = process.env.REACT_APP_APP
    const BRAND = process.env.REACT_APP_BRAND

    addWebpackAlias({
        ['@app-config']: path.resolve(__dirname, `./src/brands/${BRAND}/app`),
    })

    config.entry = `./src/${APP}/index.js`
    config.resolve.alias['@app-config'] = path.resolve(__dirname, `./src/brands/${BRAND}`)
    config.resolve.modules = [
        path.join(__dirname, `src/brands/${BRAND}`)
    ].concat(config.resolve.modules)


    return config
};

票数 0
EN

Stack Overflow用户

发布于 2019-05-25 16:49:19

我从ant设计文档中找到了一些提示:

代码语言:javascript
复制
const {
  override,
  fixBabelImports,
} = require("customize-cra");


module.exports = override( 
  fixBabelImports("import", {
    libraryName: "antd-mobile",
    style: 'css'
  })
);

参考:

https://mobile.ant.design/docs/react/use-with-create-react-app#Use-modularized-antd-mobile

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55448344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档