CRA脚手架新建项目

create-react-app xxx(输入项目名,不能有大写字母)

引入CSS预编译插件

SASS

sass在CRA的webpack已经有配置过了,所以我们只需要下载sass插件就可以直接使用,下载两个插件,一个sass,一个sass-load,sass-load是做webpack转换的。

因为CSS预编译插件我们只需要在开发环境使用,所以-D安装,在生产环境下时这个插件不会保存进package.json中。如果要在生产环境也保存,就需要使用-s安装。

npm install sass sass-loader -D

LESS

引入模块化

手机端适配

设置根字体大小

安装amfe-flexible插件

npm install amfe-flexible -s

然后引进主入口文件

import “amfe-flexible”;

重置样式

在src下新建一个文件夹asset(叫什么其实无所谓),将重置样式表放进去,然后再主入口文件中引入这个重置样式表。

自动转换单位

下完插件后还需要去webpack做二次配置,和安装装饰器的操作一样,做完下面和安装装饰器一样的操作之后,我们可以去我们新增的config-overrides.js文件中查看,会发现我们实际上是从customize-cra这个npm包中解构出了装饰器,我们想要做移动端适配或者less的webpack配置也可以通过这个包来做(通过npm上搜索这个包并查看他的API文档)。

做移动端适配我们需要解构出addPostcssPlugins函数,并且在下面的override后面的括号中调用,这里推荐直接copy官网的。

安装完成后,我们发现这个适配其实还调用了另一个包:postcss-px2rem,直接npm下载下来就可以了。

可能的问题

如果发现效果不生效,有可能是package.json文件中的react-script的版本和现在的包不兼容,可以尝试退回react-script的4版本,应该就可以解决问题。

npm install react-script@4

customize-cra的webpack配置(该npm包中包含装饰器,less,移动端适配等AP接口)

  1. // config-overrides.js
  2. // 在我们新增的文件中添加这些语句,如果之前调用过同样的包,可以直接在那个包上解构并调用。
  3. const { override, addPostcssPlugins } = require("customize-cra");
  4. module.exports = override(
  5. addPostcssPlugins([require("postcss-px2rem")({ remUnit: 37.5 })])
  6. );

先安装三个插件

npm install @babel/core @babel/plugin-proposal-decorators @babel/preset-env

创建 .babelrc

  1. {
  2. "presets": [
  3. "@babel/preset-env"
  4. ],
  5. "plugins": [
  6. [
  7. "@babel/plugin-proposal-decorators",
  8. {
  9. "legacy": true
  10. }
  11. ]
  12. ]
  13. }

创建config-overrides.js

  1. const path = require('path')
  2. const { override, addDecoratorsLegacy } = require('customize-cra')
  3. function resolve(dir) {
  4. return path.join(__dirname, dir)
  5. }
  6. const customize = () => (config, env) => {
  7. config.resolve.alias['@'] = resolve('src')
  8. if (env === 'production') {
  9. config.externals = {
  10. 'react': 'React',
  11. 'react-dom': 'ReactDOM'
  12. }
  13. }
  14. return config
  15. };
  16. module.exports = override(addDecoratorsLegacy(), customize())

安装依赖

npm install customize-cra react-app-rewired

修改package.json

  1. ...
  2. "scripts": {
  3. "start": "react-app-rewired start",
  4. "build": "react-app-rewired build",
  5. "test": "react-app-rewired test",
  6. "eject": "react-app-rewired eject"
  7. },
  8. ...