react17添加装饰器和antd按需导入

说明原由

  • 我的项目是通过cra 创建的默认所有的配置都是隐藏的 --可通过你npm run eject 暴露出所有的配置
  • 在cra项目中添加装饰器功能,需修改相应的配置
    • 通过上述的方式暴露所有的配置去修改–这种方式不可逆,对于改动点比较多可以采用
    • 对于一些小的改动 ----杀猪焉用宰牛刀 ;使用customize-cra (意思是定制cra)
    • 安装customize-cra 和 react-app-rewired
    • npm install customize-cra react-app-rewired --save-dev
    • 因为是为了添加装饰器当然还有相应的插件
    • npm install @babel/plugin-proposal-decorators --save-dev
    • 说明下:我暴露了所有的配置在package.json 中修改相应的babel配置;当然你可以尝试***不暴露***试试看,我有点懒(^ _ ^)

首先安装以下依赖

  • npm install xxxx --save-dev
  • 版本号为我当前使用的最新版本
//package.json
 //引入 antd 样式文件,需要下载 babel-plugin-import
"devDependencies": {
    "@babel/plugin-proposal-decorators": "^7.15.4",
    "babel-plugin-import": "^1.13.3",
    "customize-cra": "^1.0.0",
    "react-app-rewired": "^2.1.8"
  }
  • 你可能发下了我多了个babel-plugin-import 是为了下面的antd按需导入

修改 babel 相应配置

//package.json
"babel": {
    "plugins": [
      [
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ]
    ],
    "presets": [
      "react-app"
    ]
  },
  "devDependencies": {
    "@babel/plugin-proposal-decorators": "^7.15.4",
    "babel-plugin-import": "^1.13.3",
    "customize-cra": "^1.0.0",
    "react-app-rewired": "^2.1.8"
  }

在根目录下新建 config-overrides.js

const {
    override,
    addDecoratorsLegacy,
    fixBabelImports,
    disableEsLint
  } = require("customize-cra");
  
  module.exports = override(
    // enable legacy decorators babel plugin
    addDecoratorsLegacy(),//配置装饰器
    fixBabelImports('import', {
        // antd按需加载
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: 'css' //或者true, true代表运用less
      }),
    // disable eslint in webpack
    disableEsLint(),
  );
  
  • 如果使用 Less,需要下载 less 和 less-loader
  • npm install less less-loader --save-dev
  • 配置如下:
const {
  override,
  addDecoratorsLegacy,
  fixBabelImports,
  disableEsLint,
  addWebpackAlias,
  addLessLoader,
} = require("customize-cra");
const path = require("path");

module.exports = override(
  // enable legacy decorators babel plugin
  addDecoratorsLegacy(), //配置装饰器

  // disable eslint in webpack
  disableEsLint(), //取消eslint 校验

  // add an alias for "ag-grid-react" imports
  addWebpackAlias({
  //这是我项目的导入路径
    ["myRcFieldForm"]: path.resolve(
      __dirname,
      "src/components/my-rc-field-form"
    ),
    ["myRcForm"]: path.resolve(__dirname, "src/components/my-rc-form"),
  }),
  fixBabelImports("import", {
    // antd按需加载
    libraryName: "antd",
    libraryDirectory: "es",
    style: true, //"css"或者true, true代表运用less
  }),
  addLessLoader({
    javascriptEnabled: true,
    modifyVars: {
      "@primary-color": "red",
      "@border-color-base": "green",
      "@link-color": "orange",
    },
  })
);

  • 具体使用可以参考如下参考博客,不在此赘述了

修改 scripts

  • package.json 中
"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test"
  }

尝试启动就好了

  • npm run start or yarn start
  • 可能有如下错误
internal/modules/cjs/loader.js:883
 throw err;
 ^

Error: Cannot find module 'customize-cra'
internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module 'react-scripts/package.json'

那就再安装下,应该就好了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值