UNPKG

@10yun/open-sdk

Version:

开放平台接入sdk

164 lines (160 loc) 5.99 kB
import { loadEnv } from 'vite'; import path from 'path'; import qiankun from './vite-plugin-qiankun/es/index.js'; export { qiankunWindow } from './vite-plugin-qiankun/es/helper.js'; // import { encryptStrEncode } from './common/encipher.js'; import { buildRbac } from './common/buildRbac.js'; /** * 使用 plugins: [shiyunInjectHtml({ key: 'value' })] * @param {*} data * @returns */ export function shiyunInjectHtml(data) { return { name: 'vite-plugin-shiyun-inject-html', transformIndexHtml(html) { Object.keys(data).forEach((key) => { html = html.replace(`<!--%${key}%-->`, data[key]); }); return html; } }; } /** * * @param {*} params * @returns */ export function shiyunRelease(params = { menu_arr: [] }) { // 根据当前工作目录中的 `mode` 加载 .env 文件 const PROCESS_CWD = process.cwd(); const BASENAME_SIGN = path.basename(PROCESS_CWD); const ENV_MODE = process.env.NODE_ENV; // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。 const ENV_ARR_VITE = loadEnv(ENV_MODE, PROCESS_CWD, 'VITE_'); const { VITE_SY_PRODUCT_PORT, VITE_SY_PRODUCT_SIGN, VITE_SY_PRODUCT_VERS_DOMAIN, VITE_SY_PRODUCT_VERS_FULL, VITE_SY_PRODUCT_VERS_ALONE, VITE_SY_API_DEV, VITE_SY_APP_PROJECT_SIGN, VITE_SY_APP_CONNECT_ID, VITE_SY_APP_CONNECT_ROLE } = ENV_ARR_VITE; const LAST_PRODUCT_SIGN = VITE_SY_PRODUCT_SIGN || BASENAME_SIGN; const LAST_BUILD_VERS_DOMAIN = VITE_SY_PRODUCT_VERS_DOMAIN || ''; const LAST_BUILD_VERS_SIGN = VITE_SY_PRODUCT_VERS_ALONE == 'on' ? '' : LAST_PRODUCT_SIGN; const LAST_BUILD_VERS_FULL = VITE_SY_PRODUCT_VERS_FULL || ''; if (ENV_MODE == 'production') { buildRbac(params.menu_arr, PROCESS_CWD, { RBAC_BASE_SIGN: LAST_PRODUCT_SIGN }); } // const sign_flag = `${VITE_SY_APP_PROJECT_SIGN}---${VITE_SY_APP_CONNECT_ID}---${VITE_SY_APP_CONNECT_ROLE}`; // const sign_param = encryptStrEncode(sign_flag); // const get_api = `${VITE_SY_API_DEV}/base.base_load/common`; /** * useDevMode 开启时与热更新插件冲突 * useDevMode = true 时不开启热更新 * 如果是在主应用中加载子应用vite,必须打开这个,否则vite加载不成功, 单独运行没影响 */ const useDevMode = true; return [ // 微应用名字,与主应用注册的微应用名字保持一致 qiankun(LAST_PRODUCT_SIGN, { useDevMode }), { name: 'vite-plugin-shiyun-release', // apply: 'build', // 'build' 或 'serve' ,在什么情况下使用 config: (config, { mode, command }) => { let basePath = '/'; if (mode == 'production') { let buildPath = `${LAST_BUILD_VERS_DOMAIN}/${LAST_BUILD_VERS_SIGN}/${LAST_BUILD_VERS_FULL}/`; /** * 使用正则表达式进行过滤 * 过滤除了 https:// 和 http:// 以外的 // 和 /// */ buildPath = buildPath.replace(/\/(undefined\/)+/g, '/'); buildPath = buildPath.replace(/([^:]\/)\/+/g, '$1'); basePath = buildPath; } return { base: basePath, server: { port: VITE_SY_PRODUCT_PORT }, esbuild: { drop: ['console', 'debugger'] }, optimizeDeps: { esbuildOptions: { target: 'esnext' }, // 确保 open-sdk 包在依赖优化中 // include: ['@10yun/open-sdk'] /** * TODO * 确保 open-sdk 包不在依赖优化中,不然造成修改 【项目@/下的相关文件】,vite无法及时热更新响应 * 添加下列 exclude 会爆 dayjs 问题 */ exclude: ['@10yun/open-sdk/uncompiled'] // exclude: ['@10yun/open-sdk'] }, build: { // target: ['chrome89', 'edge89', 'firefox89', 'safari15', 'chrome87', 'edge88', 'es2020', 'firefox78', 'safari14'], target: 'esnext', sourcemap: false, chunkSizeWarningLimit: 2000 }, output: { // 把子应用打包成 umd 库格式 // library: `${子应用名}-[name]`, // libraryTarget: 'umd', // jsonpFunction: `webpackJsonp_${子应用名}` library: `${BASENAME_SIGN}-[name]`, libraryTarget: 'umd', jsonpFunction: `webpackJsonp_${BASENAME_SIGN}` } }; }, configResolved(config) { // console.log('---111---'); // console.log('configResolved', config.base, config.mode, config.command, config.esbuild); // config.base = 'asdad'; // isProduction = config.command === 'build' || config.isProduction; // base = config.base; }, configureServer(server) { // 在开发服务器配置时可以执行的逻辑 // console.log('开发的时候', server); }, transformIndexHtml(html) { if (ENV_MODE == 'development') { // 删除带 mode="pro" 的标签 html = html.replace(/<(script)\b[^>]*?mode="pro"[^>]*>[\s\s]*?<\/script>/gi, ''); html = html.replace(/<(link|script)\b[^>]*?mode="pro"[^>]*>/gi, ''); } if (ENV_MODE == 'production') { // 删除带 mode="dev" 的标签 if (VITE_SY_PRODUCT_VERS_ALONE != 'on') { html = html.replace(/<(script)\b[^>]*?mode="dev"[^>]*>[\s\S]*?<\/script>/gi, ''); html = html.replace(/<(link|script)\b[^>]*?mode="dev"[^>]*>/gi, ''); } } // 删除空行 html = html.replace(/\n\s*\n/g, '\n'); return html; } // transform(code, id) { // // console.log('transform'); // if (id.endsWith('.example')) { // // 对特定文件进行转换逻辑 // return code + '\n// This is an example plugin transformation'; // } // } } ]; }