1. antd按需引入
  2. proxy代理
  3. HMR热更新
    1. env 针对特定环境进行配置
    2. HMR 只在开发环境下使用,所以将配置添加到 development 字段即可
    3. npm run build 时的环境变量为 production
    4. 若无效,就更新一下 babel-plugin-dva-hmr
  4. cssModules
    1. 默认已经启用了 CSS Modules
    2. "disableCSSModules": true 禁用 cssModules
  5. 更多 .webpackrc 的配置,参考 roadhog 配置
    1. roadhog配置 https://github.com/sorrycc/roadhog/blob/master/README_zh-cn.md
  6. theme配置,参考 default.less
    1. default.less https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less

.webpackrc.js

  1. const aliasPath = require('./aliasPath.js');
  2. const buildPath = require('./buildPath.js');
  3. const proxy = require('./proxy.js');
  4. export default {
  5. alias: aliasPath.resolve.alias,
  6. // npm run build 构建配置
  7. es5ImcompatibleVersions: true,
  8. extraBabelIncludes: [
  9. 'node_modules/regl',
  10. 'node_modules/@antv/algorithm',
  11. 'node_modules/@antv/layout',
  12. ],
  13. "extraBabelPlugins": [
  14. ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
  15. ],
  16. // proxy 代理
  17. "proxy": {
  18. "/api": {
  19. "target": "http://your-api-server",
  20. "changeOrigin": true
  21. }
  22. },
  23. // 禁用 cssModule
  24. "disableCSSModules": false,
  25. lessLoaderOPtions: {
  26. javascriptEnabled: true,
  27. },
  28. // 自定义 theme主题;自定义的变量太多,将其单独提取到一个文件
  29. theme: "./src/theme.js",
  30. // 热更新
  31. "env": {
  32. "development": {
  33. "extraBabelPlugins": [
  34. "dva-hmr"
  35. ]
  36. }
  37. },
  38. externals: {
  39. moment: 'moment'
  40. lodash: '_',
  41. react: 'React',
  42. antd: 'antd',
  43. 'prop-types': 'PropTypes',
  44. 'react-dom': 'ReactDOM',
  45. 'react-redux': 'ReactRedux',
  46. 'react-router': 'ReactRouter',
  47. 'react-router-dom': 'ReactRouterDOM',
  48. 'redux-router-redux': 'ReactRouterRedux',
  49. redux: 'Redux',
  50. 'redux-saga': 'ReduxSaga',
  51. }
  52. }

theme.js

  1. export default {
  2. "primary-color": "#000",
  3. }

webpackrc文档

Roadhog webpackrc.js配置
https://github.com/sorrycc/roadhog/blob/master/README_zh-cn.md

css modules

dva默认开启 css modules

  1. disableCSSModules: false, // true:关闭 cssModules

组件使用 css modules

  1. import styles from './style.less'
  2. <List classNames={styles.list} />

dva启用 css modules后使用全局样式,要放在 :global下面

  1. :global {
  2. .mb16 { margin-bottom: 16px }
  3. .mb32 { margin-bottom: 32px }
  4. .text-center { text-align: center }
  5. }
  6. // 组件使用全局样式
  7. <List classNames="text-center" />

:global(.classname)
style.less

  1. :global(.title) {
  2. margin: 0 15px;
  3. }

roadhog配置

dva初始化没有 .roadhogrc,因为 roadhog@2,用 .webpackrc 作为配置文件
.webpackrc.js

  1. {
  2. "extraBabelPlugins": [
  3. ["import", {
  4. "libraryName": "antd",
  5. "libraryDirectory": "es",
  6. "style": true
  7. }]
  8. ],// 因为要使用mock,所以需要将这一坨注释
  9. "proxy": {
  10. "/api": {
  11. "target": "http://localhost:7001/", // 请求数据接口的地址
  12. "changeOrigin": true
  13. }
  14. },
  15. "env": {
  16. "development": {
  17. "extraBabelPlugins": [
  18. "dva-hmr"
  19. ]
  20. }
  21. }
  22. }

mock

.roadhogrc.mock.js

  1. const fs= require('fs');
  2. const path= require('path');
  3. const mockPath= path.join(__dirname+'/mock');
  4. const mock={};
  5. fs.readdirSync(mockPath).forEach(file=>{
  6. Object.assign(mock,require('./mock/'+file));
  7. });
  8. module.exports=mock