{"_id":"@bty/vite-plugin-file-mock","_rev":"5-91c27c562eccdb99e6d347db7d6944b2","name":"@bty/vite-plugin-file-mock","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@bty/vite-plugin-file-mock","version":"0.0.1","license":"MIT","_id":"@bty/vite-plugin-file-mock@0.0.1","maintainers":[{"name":"bty_qianhai","email":"qianhai@bantouyan.com"},{"name":"bty-owner","email":"kun@bantouyan.com"}],"dist":{"shasum":"8c294040dac9b72b5b5d9ba680cbfda8e7c0be83","tarball":"https://registry.npmjs.org/@bty/vite-plugin-file-mock/-/vite-plugin-file-mock-0.0.1.tgz","fileCount":6,"integrity":"sha512-nYnSpVEd/CO63sTf1xrulXNNqEGRolPoX7fZT1f6MZo8b2aV8qWkMqPzNpFJ3U7sP276hSeDoIyW7DcvqQanYw==","signatures":[{"sig":"MEUCICervwhnCWWX1Gi3y9WAX3MMAR+eL4EQ/CTWMGT2ItU5AiEAiXTkgJVJqcFpIfnu13gZ7owtpQrArxUFMNI5lnwbCy0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16706},"main":"dist/index.js","_from":"file:bty-vite-plugin-file-mock-0.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"scripts":{"dev":"tsup-node src/index.ts --dts --format esm,cjs --watch","build":"tsup-node src/index.ts --dts --format esm,cjs --clean"},"_npmUser":{"name":"bty_qianhai","email":"qianhai@bantouyan.com"},"_resolved":"/private/var/folders/v_/lfkqv_r5091csylk03zdbmtm0000gn/T/d42c5ab7b552708c7dcf0dbad4f9cde8/bty-vite-plugin-file-mock-0.0.1.tgz","_integrity":"sha512-nYnSpVEd/CO63sTf1xrulXNNqEGRolPoX7fZT1f6MZo8b2aV8qWkMqPzNpFJ3U7sP276hSeDoIyW7DcvqQanYw==","_npmVersion":"9.5.1","description":"> 基于文件系统的mock插件，基于[vite-plugin-file-mock](https://npmjs.com/package/vite-plugin-file-mock) 拓展，支持restful接口形式","directories":{},"_nodeVersion":"18.16.1","dependencies":{"jiti":"^1.16.0","debug":"^4.3.4","fast-glob":"^3.2.12","url-pattern":"^1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.0.2","@types/node":"^18.8.5","@types/debug":"^4.1.7","@bty/tsconfig":"0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-file-mock_0.0.1_1700791943990_0.3650142169149011","host":"s3://npm-registry-packages"}}},"time":{"created":"2023-11-24T02:12:23.911Z","modified":"2026-06-14T14:38:58.337Z","0.0.1":"2023-11-24T02:12:24.168Z"},"license":"MIT","description":"> 基于文件系统的mock插件，基于[vite-plugin-file-mock](https://npmjs.com/package/vite-plugin-file-mock) 拓展，支持restful接口形式","maintainers":[{"email":"zhangyi@bantouyan.com","name":"steveyzhang"},{"email":"kun@bantouyan.com","name":"bty-owner"},{"email":"mufeng@bantouyan.com","name":"bty_mufeng"},{"email":"qianhai@bantouyan.com","name":"bty_qianhai"},{"email":"qiwa@bantouyan.com","name":"qiwa"},{"email":"kongwo@bantouyan.com","name":"kongwo"}],"readme":"# @keyu/vite-plugin-mock\n\n> 基于文件系统的mock插件，基于[vite-plugin-file-mock](https://npmjs.com/package/vite-plugin-file-mock) 拓展，支持restful接口形式\n\n## 目录\n\n- [安装与使用](#安装与使用)\n- [选项](#选项)\n- [概览](#概览)\n- [自定义内容](#自定义内容)\n- [TypeScript 和 ESM 支持](#typescript-和-esm-支持)\n- [异步函数](#异步函数)\n- [忽略指定接口](#忽略指定接口)\n\n## 安装与使用\n\n```js\n// vite.config.js\nimport mockPlugin from 'vite-plugin-file-mock'\n\nexport default {\n  plugins: [\n    mockPlugin(),\n  ]\n}\n```\n\n```ts\ninterface MockPluginOptions {\n  dir?: string\n  enable?: boolean\n  refreshOnSave?: boolean\n  noRefreshUrlList?: Array<string | RegExp>\n}\n```\n\n可以看看这个[例子](./example/)\n\n## 选项\n\n### dir\n\n- **Type:** `string`\n- **Default:** `mock`\n\n本地mock文件所在的路径, 相对于vite root, 默认是vite root下的mock文件夹\n\n### enable\n\n- **Type:** `boolean`\n- **Default:** `true`\n\n是否开启mock功能\n此插件只在`serve`阶段生效\n\n### refreshOnSave\n\n- **Type:** `boolean`\n- **Default:** `true`\n\n当mock文件变更, 是否刷新浏览器\n\n### noRefreshUrlList\n\n- **Type:** `Array<string | RegExp>`\n- **Default:** `[]`\n\nrefreshOnSave 会自动开启，当有些接口不想自动刷新页面时，可以放这里，支持正则\n\n## 概览\n\n插件会默认选择根目录`/mock`文件夹下所有的`.js`和`.ts`(也可以是`.mjs` `.cjs`, 暂不支持`.mts` `.cts`)文件来生成mock数据, 文件路径即接口\n\n```text\nmock/\n  ├── api/\n  │  ├── home.js\n  │  ├── user.js\n```\n\n如上目录结构将生成两条接口`/api/home`和`/api/user`\n\n```js\n// home.js\nexport default {\n  result: 1,\n}\n```\n\n```js\nfetch('/api/home')\n  .then(response => response.json())\n  .then(data => console.log(data)) // { result: 1}\n```\n\nmock文件可以直接返回数据, 这样任何请求`/api/home`都将返回相同的数据\n\n## 自定义内容\n\n有时候我们需要自定义返回的内容, 比如\n\n- mock rest接口\n- 根据参数来动态返回内容\n- 使用[faker.js](https://github.com/faker-js/faker)来辅助内容生成\n- ...\n\n这时候, 可以让mock文件返回一个函数, 函数里再返回我们需要自定义的内容\n也可以直接使用 `response` 来定义 `statusCode`, `header`, `data` 等\n\n> 如果函数里没有调用 response.end, 则函数的返回值会作为最终 response 返回的值\n\n```js\n// user.js\nexport default (request, response) => {\n  if (request.method === 'GET') {\n    return {\n      result: 1,\n      method: request.method,\n    }\n  }\n  else if (request.method === 'POST') {\n    return {\n      result: 2,\n      method: request.method,\n    }\n  }\n  else {\n    response.statusCode = 500\n    response.end(JSON.stringify({\n      result: 3,\n      method: request.method,\n    }))\n  }\n}\n```\n\n## 同路径接口不同method\n\n```js\n// get方法\nexport function GET() {\n  return {\n    result: 1,\n    method: 'GET',\n  }\n}\n// post方法\nexport function POST() {\n  return {\n    result: 1,\n    method: 'POST',\n  }\n}\n```\n\n## restful接口模糊匹配\n\n示例：api/v1/flow/:flowId\n\n文件路径：api/v1/flow/[flowId].ts\n> mock文件以[xxx]命名，即可实现模糊匹配，[xxx]将会被替换为实际的值\n\n```js\nexport default () => {\n  return {\n    result: 1,\n  }\n}\n```\n\n## TypeScript 和 ESM 支持\n\nmock 文件同时`.js`和`.ts`, `.js`既可以是 `commonjs`, 也可以是 `esm`\n\n```js\n// home.js commonjs\nmodule.exports = {\n  result: 1,\n}\n```\n\n```js\n// home.js esm\nexport default {\n  result: 1,\n}\n```\n\n```js\n// home.ts\nexport default () => {\n  return {\n    result: 1\n  }\n}\n```\n\n## 异步函数\n\nmock 文件也支持异步函数, 这样允许用更多的自定义\n\n```js\nasync function delay(time) {\n  return new Promise((resolve, reject) => {\n    setTimeout(resolve, time)\n  })\n}\n\n// 5秒后返回数据\nexport default async () => {\n  const data = {\n    result: 1,\n  }\n\n  await delay(5000)\n\n  return data\n}\n```\n\n## 忽略指定接口\n\n忽略指定接口有两种做法：\n\n1.把整个文件注释\n\n```js\n// home.js\n// export default {\n//     result: 1,\n// };\n```\n\n2.返回 undefined\n\n```js\n// home.js\nexport default {\n  result: 1,\n} && undefined\n```\n","readmeFilename":"README.md"}