UNPKG

vue-cli-plugin-mocker

Version:

@vue/cli plugin for mock data

60 lines (59 loc) 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("../index"); /** * VUE Generator 扩展 * @param api GeneratorAPI 实例 * @param opts 插件配置选项 * @param preset 当前使用预设 */ exports.default = (api, opts, preset) => { const mergeOpts = { ...index_1.mockerOptions, ...opts }; if (!mergeOpts.registry) { delete mergeOpts.registry; } const { mock } = mergeOpts; /* 保存插件配置 */ const vue = { pluginOptions: { mocker: { ...mergeOpts, mock: mock && Object.keys(mock).length > 0 ? mock : {} }, }, }; api.extendPackage({ vue, /* 启动脚本 */ scripts: { 'start:mock': 'cross-env MOCK=true vue-cli-service serve', }, devDependencies: { mockjs: '^1.1.0', }, }); const { dir, demo } = mergeOpts; const isTs = api.hasPlugin('typescript'); const data = { isTs }; /* 渲染模板 */ if (demo) { /* template/mock 目录下文件名称 */ const tpl = ['demo']; const ext = isTs ? 'ts' : 'js'; const sourceTpl = tpl.reduce((pre, name) => { return { ...pre, [`${dir}/${name}.${ext}`]: `template/mock/${name}.ejs`, }; }, {}); api.render(sourceTpl, data, {}); } /* readme.md 添加 mock 启动说明 */ api.postProcessFiles((files) => { const readme = String(files['README.md']) || ''; const lines = readme.split(/\r?\n/g); const serveIndex = lines.findIndex((line) => line.match(/yarn build/)); if (serveIndex > 0) { const insertPos = serveIndex - 2; lines.splice(insertPos, 0, '### Compiles with mocker and hot-reloads for development', '```', 'yarn start:mock', '```', ''); files['README.md'] = lines.join('\n'); } }); };