技术栈 typescript+react+mobx+react-router+less+axios
- 创建
- 兼容 ie9+
- 配置 alias
- less
- antd
- dev-proxy + axios
- mobx
- react-router
- 打包后资源引用路径
- 自定义环境变量
yarn create react-app my-app --template typescript
cd my-app
yarn run eject
rm -rf ./node_modules
rm -rf ./.git
yarn
yarn add react-app-polyfill
// src/index.ts
import "react-app-polyfill/ie9";
import "react-app-polyfill/stable";
// config/webpack.config.js
"@": path.resolve(__dirname, "../src"),
// tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
},
}
yarn add less less-loader style-resources-loader -D
添加公共 less 文件, src/styles/mixins.less
,src/styles/variable.less
配置config/webpack.config.js
,其他配置内容查看根据下面定义的变量查找.
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
// less公共变量
const styleResourceLoader = {
loader: "style-resources-loader",
options: {
patterns: path.resolve(__dirname, "../src/styles/*.less"),
injector: "prepend"
}
};
// css-module使用的类名
const cssModuleClassName = isEnvDevelopment ? "[path]__[name]__[local]" : "[hash:base64:10]";
解决提示"找不到 module.less"模块的问题
// src/react-app-env.d.ts
declare module "*.module.less" {
const classes: { readonly [key: string]: string };
export default classes;
}
yarn add antd@3.26.15 //兼容ie9+
config/webpack.config.js
中的 getStyleLoaders
方法
javascriptEnabled: true, //支持less可以使用变量
新建src/antd-theme.less
并在src/index.ts
中引入.
yarn add http-proxy-middleware -D
新建src/setupProxy.js
yarn add axios
新建src/utils/http.ts
yarn add mobx@4.15.4 mobx-react //兼容ie9+
新建src/utils/mobx-store-module.ts
,src/store/index.ts
不使用 react 的严格模式,把src/index.ts
中的React.StrictMode
去掉.
解决 mobx 警告
You haven't configured observer batching which might result in unexpected behavior in some cases
// src/index.ts
import "mobx-react-lite/batchingForReactDom";
yarn add react-router-dom @types/react-router-dom
新增src/routes.ts
,并修改src/index.ts
和src/App.ts
默认的引用路径为/
,这会导致打包后运行时,获取不到资源.需要修改成相对路径./
// package.json
"homepage": "./"
直接对应模式的文件中添加即可. 获取时使用process.env
安装这个插件可以强制修改环境变量. 注意: 只能修改已经定义的变量, 无法添加新变量
yarn add cross-env -D
在package.json
中的script
字段中使用
"scripts": {
"start": "cross-env YOUR_VALUE=abcdef node scripts/start.js",
"build": "node scripts/build.js",
"test": "node scripts/test.js"
},