UNPKG

vue-cli-plugin-extend-base

Version:

@vue/cli official plug-in extension

118 lines (117 loc) 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_BASE_PLUGIN_OPTION = void 0; /** * 默认插件配置 */ exports.DEFAULT_BASE_PLUGIN_OPTION = { eslint: true, forkTsChecker: true, crossEnvVersion: '^7.0.3', }; /** * 全局自定义变量 * @param config * @param opts */ const customDefineGlobalVariable = (config, opts) => { const webpack = require('webpack'); const prefixREG = /^APP_/; const { version, port, baseUrl, mocked, environment } = opts; const raw = Object.keys(process.env) .filter((key) => prefixREG.test(key)) .reduce((env, key) => { env[key] = process.env[key]; return env; }, /* 初始化值 */ { BASE_URL: baseUrl, MOCK: mocked, APP_VERSION: version, APP_ENV: environment, APP_PORT: port, APP_BASE: baseUrl, // 请求库使用的全局变量 APP_REQUEST_PREFIX: '', APP_REQUEST_PROXY: !!process.env.PROXY || false, APP_REQUEST_START_REPLACE_EMPTY: '/api', APP_REQUEST_RESULT_FORMAT: '$.data', }); const env = Object.keys(raw).reduce((pre, key) => { pre[key] = JSON.stringify(raw[key]); return pre; }, {}); /* 1.添加全局变量 */ config.plugin('custom-define').use(webpack.DefinePlugin, [ { ...env, }, ]); }; /** * TS 检查校验 * @param config * @param forkTsChecker */ const forkTsVerify = (config, forkTsChecker) => { /* 5. fork-ts-checker 插件配置 */ if (forkTsChecker) { /* 修改 fork-ts-checker 插件,导致无.vue后缀的组件导入错误 */ if (Object.keys(forkTsChecker).length === 0) { config.plugins.get('fork-ts-checker').tap((args) => { const [options] = args; const { typescript: { extensions, diagnosticOptions }, } = options; const result = { typescript: { extensions, diagnosticOptions: { ...diagnosticOptions, semantic: false }, }, }; return [result]; }); } else { config.plugins.get('fork-ts-checker').tap(() => [forkTsChecker]); } } else { /* 或者直接删除 */ config.plugins.delete('fork-ts-checker'); } }; /** * service 插件 * @param api * @param projectOptions */ exports.default = (api, projectOptions) => { const { pluginOptions } = projectOptions || {}; const extendBase = pluginOptions.extendBase || {}; const { eslint, forkTsChecker } = extendBase; api.chainWebpack((config) => { const baseUrl = String(process.env.BASE_URL || '/'); const port = Number(process.env.APP_PORT || 8080); const isProd = process.env.NODE_ENV === 'production'; const environment = isProd ? false : 'dev'; const opts = { baseUrl, port, environment, mocked: false, version: require(`${api.getCwd()}/package.json`).version, }; customDefineGlobalVariable(config, opts); /* 2.开发环境配置 */ config.devServer.open(true).port(port).hot(true); /* 3.依据环境变量同步修改 publicPath */ projectOptions.publicPath = baseUrl; config.output.publicPath(baseUrl); /* 4.移除 eslint 检查 */ if (!eslint) { config.plugins.delete('eslint'); } /* 5. fork-ts-checker 插件配置 */ forkTsVerify(config, forkTsChecker); }); };