webpack配置mockjs,开发阶段对接口进行mock
1、先准备项目
运行 npx create-react-app projectName创建一个 react 项目,为了不暴露 webpack 的配置,我们不运行 npm run eject命令暴露配置,因此我们还需要安装 react-app-rewired 和 customize-cra 来进行对项目的 webpack 配置文件进行覆盖。
在根目录下创建 config-overrides.js 配置文件。
2、接下来就是开始配置打包设置和相关代码
先配置webpack打包配置文件 config-overrides.js,config-overrides.js 内容如下,mock配置在最后使用 setupMiddlewaresd 进行mock配置,其他的配置无需关心
const Cra = require('customize-cra');
const {override, fixBabelImports, addWebpackPlugin, addLessLoader, addWebpackAlias, overrideDevServer, watchAll} = Cra;
const UglifyjsWebpack = require('uglifyjs-webpack-plugin');
const path = require('path');
const config = {
webpack: override(
// 按需引入antd组件(引入 antd 样式文件,需要下载 babel-plugin-import)
// fixBabelImports("import", {
// libraryName: "antd",
// libraryDirectory: "es",
// style: true,
// }),
// 别名
addWebpackAlias({
"@": path.resolve(__dirname, 'src')
}),
// 添加less支持,默认支持sass,因此只需要安装 sass包就可以了,不需要对sass进行配置
addLessLoader({
lessOptions: {
strictMath: true,
javascriptEnabled: true,
// Optionally adjust URLs to be relative. When false, URLs are already relative to the entry less file.
relativeUrls: false,
modifyVars: { '@primary-color': '#A80000' },
// cssModules: {
// // if you use CSS Modules, and custom `localIdentName`, default is '[local]--[hash:base64:5]'.
// localIdentName: "[path][name]__[local]--[hash:base64:5]",
// }
}
}),
// 删除 console和debugger
// 注意是production环境才启动该插件用于删除 console和debugger
process.env.NODE_ENV === 'production' && addWebpackPlugin(
new UglifyjsWebpack({
// 打包缓存开启
cache: true,
// 开启多线程打包
parallel: true,
uglifyOptions: {
// 删除警告
warnings: true,
// 压缩
compress: {
// 删除console
drop_console: true,
// 删除debugger
drop_debugger: true
}
}
})
),
)
}
if(process.env.NODE_ENV === 'development'){
config.devServer = overrideDevServer((config)=>{
return {
...config,
// 配置mock
setupMiddlewares: require('./src/mocks/index.js'),
}
}, watchAll());
}
module.exports = config;
3、在src目录下创建mocks目录,并在mocks目录下创建index.js文件 mocks/index.js 文件内容如下:
const Test= require('./apis/test')
const obj = {
...Test,
}
module.exports = function (middlewares, devServer) {
Object.keys(obj).forEach((v) => {
obj[v](devServer)
})
return middlewares
}
4、在mocks目录下创建apis目录,并创建具体的mock数据文件test.js, mocks/apis/test.js 文件内容如下:
const { handleReq } = require('../utils')
module.exports = {
getUser: (devServer) => {
handleReq(devServer, {
url: '/users',
method: 'get',
json: {
"name": "张三"
},
})
},
}
5、在mocks目录下创建utils.js文件,用于处理数据返回值的公共逻辑,mocks/utils.js 内容如下:
const Mock = require('better-mock');
Mock.setup({
timeout: 1000,
});
module.exports = {
handleReq: (devServer, config) => {
const { method, url, json } = config
devServer.app[method]('/mock/api' + url, function (_, res) {
res.json(Mock.mock(json))
})
},
}
6、在项目业务代码中使用mock数据,注意请求链接 /mock/api ,utils.js 里面的链接需要和业务代码中的进行匹配,不然没办法进行接口请求代理。
axios.get('/mock/api/users').then((res)=>{
console.log('res', res)
})
注意:
因为是在webpack的配置文件中引入的mock带,因此,目前不支持修改mock实时获取,每次修改mock数据后,需要重新启动服务才能获取到最新的mock数据。

浙公网安备 33010602011771号