如何使用 craco 在 react 项目中开启装饰器语法

732 阅读4分钟

如何使用 craco 在 react 项目中开启装饰器语法

装饰器(decorators)是一种实验性的语法,可以让我们用一种简洁优雅的方式来修改或增强类和类方法的行为。它们在一些框架或库中有广泛的应用,比如 Angular、MobX、Redux 等。但是,装饰器并不是标准的 JavaScript 语法,如果我们想在 react 项目中使用它们,我们需要做一些额外的配置。

什么是 craco

craco 是一个 npm 包,它的全称是 Create React App Configuration Override,意思是覆盖 create-react-app 的默认配置。create-react-app 是一个非常方便的脚手架工具,可以让我们快速创建一个 react 项目,但是它也有一些限制,比如它隐藏了 webpack 的配置文件,如果我们想要自定义一些配置,我们需要执行 eject 命令,暴露出所有的配置文件,这样就会失去 create-react-app 的优势和便利。

craco 的作用就是让我们可以在不执行 eject 命令的情况下,自定义 create-react-app 的配置,包括 webpack、babel、eslint、postcss 等。它提供了一个简单灵活的方式,让我们可以覆盖或扩展 create-react-app 的默认配置,而不会影响到 create-react-app 的核心功能。

如何使用 craco 开启装饰器语法

要使用 craco 开启装饰器语法,我们需要做以下几个步骤:

安装 craco 和相关的插件

首先,我们需要安装 craco 和相关的插件。我们可以在终端中执行以下命令:

npm install --save @craco/craco

npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties

这样就安装了 craco 和 babel 的装饰器插件。

修改 package.json 中的 scripts 属性

接下来,我们需要修改 package.json 中的 scripts 属性,把 react-scripts 替换成 craco。我们可以把 package.json 中的 scripts 属性修改成这样:


"scripts": {

 "start": "craco start",

 "build": "craco build",

 "test": "craco test"

}

这样就告诉 create-react-app 使用 craco 来运行项目。

创建 craco.config.js 文件

然后,我们需要在项目根目录下创建一个 craco.config.js 文件,用来添加 craco 的配置。我们可以在 craco.config.js 文件中添加以下内容:


module.exports = {

 babel: {

  // 用来支持装饰器语法
  plugins: [
   ["@babel/plugin-proposal-decorators", { legacy: true }],
   ["@babel/plugin-proposal-class-properties", { loose: true }],
  ]

 }

};

这样就告诉 babel 使用旧版的装饰器语法插件。

重新运行项目

最后,我们需要重新运行项目,让配置生效。我们可以在终端中执行以下命令:


npm start

这样就启动了项目,并开启了装饰器语法。

如何使用 craco 配置 eslint

除了开启装饰器语法外,我们还需要配置 eslint 来支持装饰器语法。否则,eslint 可能会报错或警告,影响我们的代码质量和开发体验。

要使用 craco 配置 eslint,我们需要做以下几个步骤:

在 craco.config.js 文件中添加 eslint 属性

首先,我们需要在 craco.config.js 文件中添加 eslint 属性,用来覆盖或扩展 create-react-app 的默认 eslint 配置。我们可以在 craco.config.js 文件中添加以下内容:


module.exports = {

 // ...

 eslint: {

  enable: true, // 是否启用 eslint

  mode: 'extends', // 覆盖模式,可以是 'extends' 或 'file'

  configure: {

   // 任何 eslint 配置选项

  },

  pluginOptions: {

   // 任何 eslint 插件配置选项

  }

 }

};

如果想使用自定义的 eslint 配置文件

如果我们想使用自定义的 eslint 配置文件,比如 .eslintrc.js,我们可以把 mode 设置为 'file',然后在项目根目录下创建一个 .eslintrc.js 文件,添加我们想要的配置。例如:

module.exports = {
 // ...
 eslint: {

  enable: true,

  mode: 'file',

 }

};


module.exports = {

 // 任何 eslint 配置选项

};

如果想使用 airbnb 的 eslint 配置

如果我们想使用 airbnb 的 eslint 配置,我们可以安装以下依赖,并在 .eslintrc.js 文件中添加以下内容:


npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y


module.exports = {

 extends: "airbnb",

 rules: {

  // 我们可以在这里覆盖或添加一些规则

 }

};

在 .eslintrc.js 文件中添加 parserOptions 属性

无论我们使用哪种方式来配置 eslint,我们都需要在 .eslintrc.js 文件中添加 parserOptions 属性,并设置 legacyDecorators 为 true。这样可以让 eslint 使用旧版的装饰器语法,并避免报错。例如:


module.exports = {

 // ...

 parserOptions: {

  ecmaFeatures: {

   legacyDecorators: true

  }

 }

};

重新运行项目

最后,我们需要重新运行项目,让配置生效。我们可以在终端中执行以下命令:


npm start

这样就启动了项目,并配置了 eslint。

总结

通过以上几个步骤,我们就可以使用 craco 在 react 项目中开启装饰器语法,并配置对应的 eslint。这样就可以让我们享受到装饰器带来的便利和优雅,并保证代码质量和风格统一。当然,craco 还有很多其他的功能和用法,如果你想了解更多,请参考官方文档:craco.js.org/