- Published on
TypeScript + React + Umi + Dva 开发入门之环境搭建
前言
由于兼职的项目需要拓展更为复杂的功能,虽然已经借着从 material-ui 改为 antd 的契机重构了一次,但是仍然不让人满意。
恰好在公司开发的时候使用了快三个月的 ant-design-pro ,一顿体验下来,感觉很 ok ,特别是 modal 与 page 的搭配,感觉是真滴顺手。遂决定采用 Umi 和 Dva 来再次重构一下,再借着本次机会直接采用 TypeScript 开发整个项目。那么,现在就从环境搭建开始吧。
环境搭建
$ npm install create-umi -g
通过 Umi 官网的 通过脚手架创建项目初始化项目。
- yarn create umi [appName]
- 选择 app
- 启用 typescript
- 选择 antd 、 dva 和 internationalization
- yarn
- yarn start
启动成功之后就可以开始大刀阔斧的操作了。
tsconfig.json
{
"experimentalDecorators": true
}
umi-request
因为使用 ant-design-pro 而使用了 umi-request ,发现这个基于 fetch 封装的工具也是真好用啊,但是好像 Umi 不自带,所以 yarn add umi-request
安装一哈。
.umirc.ts
const config: IConfig = {
treeShaking: true,
define: {
'process.env.param': 'value', // 配置环境变量
},
lessLoaderOptions: {
// Less 配置,修改 antd 主题
javascriptEnabled: true,
modifyVars: {
'@primary-color': '#009688',
'@font-family':
"-apple - system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans- serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'",
},
paths: [
path.resolve(__dirname, 'node_modules'),
path.resolve(__dirname, 'src'),
],
},
plugins: [
// 官方插件配置
// ref: https://umijs.org/plugin/umi-plugin-react.html
[
'umi-plugin-react',
{
antd: true,
dva: true,
dynamicImport: false,
title: 'eler',
dll: false,
locale: {
enable: true,
default: 'en-US',
baseNavigator: true,
},
routes: {
exclude: [
/models\//,
/services\//,
/model\.(t|j)sx?$/,
/service\.(t|j)sx?$/,
/components\//,
],
},
},
],
],
chainWebpack(config) {
// 刚开始配置了 lessLoaderOptions 以为没生效,所以使用这个配置了一波。后来才知道原来得使用 css-modules 的方式使用才行,即: import styles from 'styles.less';
// config.resolve.extensions
// .add('.tsx');
// config.module.rule('less-loader')
// .test(/\.less$/)
// .use('less-loader')
// .loader(require.resolve('less-loader'))
// .options({
// javascriptEnabled: true,
// modifyVars: {
// '@primary-color': '#009688',
// '@font-family': '-apple - system, BlinkMacSystemFont, \'Segoe UI\', \'PingFang SC\', \'Hiragino Sans GB\', \'Microsoft YaHei\', \'Helvetica Neue\', Helvetica, Arial, sans- serif, \'Apple Color Emoji\', \'Segoe UI Emoji\', \'Segoe UI Symbol\'',
// },
// paths: [
// path.resolve(__dirname, 'node_modules'),
// path.resolve(__dirname, 'src'),
// ],
// });
},
routes: [
// 配置路由
//...
],
}