feat: support pwa
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
"html-minifier-terser": "^7.2.0",
|
||||
"resolve.exports": "^2.0.2",
|
||||
"vite-plugin-lib-inject-css": "^2.1.1",
|
||||
"vite-plugin-pwa": "^0.20.0",
|
||||
"vite-plugin-vue-devtools": "^7.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@@ -10,7 +10,8 @@ import { getApplicationConditionPlugins } from '../plugins';
|
||||
import { getCommonConfig } from './common';
|
||||
|
||||
function defineApplicationConfig(options: DefineApplicationOptions = {}) {
|
||||
return defineConfig(async ({ command, mode }) => {
|
||||
return defineConfig(async (config) => {
|
||||
const { command, mode } = config;
|
||||
const { application = {}, vite = {} } = options;
|
||||
const root = process.cwd();
|
||||
const isBuild = command === 'build';
|
||||
@@ -28,8 +29,11 @@ function defineApplicationConfig(options: DefineApplicationOptions = {}) {
|
||||
isBuild,
|
||||
mock: true,
|
||||
mode,
|
||||
pwa: true,
|
||||
turboConsole: false,
|
||||
...application,
|
||||
...(typeof application === 'function'
|
||||
? application(config)
|
||||
: application),
|
||||
});
|
||||
|
||||
const applicationConfig: UserConfig = {
|
||||
@@ -91,7 +95,10 @@ function defineApplicationConfig(options: DefineApplicationOptions = {}) {
|
||||
await getCommonConfig(),
|
||||
applicationConfig,
|
||||
);
|
||||
return mergeConfig(mergedConfig, vite);
|
||||
return mergeConfig(
|
||||
mergedConfig,
|
||||
typeof vite === 'function' ? vite(config) : vite,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -10,7 +10,8 @@ import { getLibraryConditionPlugins } from '../plugins';
|
||||
import { getCommonConfig } from './common';
|
||||
|
||||
function defineLibraryConfig(options: DefineLibraryOptions = {}) {
|
||||
return defineConfig(async ({ command, mode }) => {
|
||||
return defineConfig(async (config) => {
|
||||
const { command, mode } = config;
|
||||
const root = process.cwd();
|
||||
const { library = {}, vite = {} } = options;
|
||||
const isBuild = command === 'build';
|
||||
@@ -20,7 +21,7 @@ function defineLibraryConfig(options: DefineLibraryOptions = {}) {
|
||||
injectLibCss: true,
|
||||
isBuild,
|
||||
mode,
|
||||
...library,
|
||||
...(typeof library === 'function' ? library(config) : library),
|
||||
});
|
||||
|
||||
const { dependencies = {}, peerDependencies = {} } =
|
||||
@@ -45,7 +46,10 @@ function defineLibraryConfig(options: DefineLibraryOptions = {}) {
|
||||
};
|
||||
const commonConfig = await getCommonConfig();
|
||||
const mergedConfig = mergeConfig(commonConfig, packageConfig);
|
||||
return mergeConfig(mergedConfig, vite);
|
||||
return mergeConfig(
|
||||
mergedConfig,
|
||||
typeof vite === 'function' ? vite(config) : vite,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -21,6 +21,7 @@ import viteDtsPlugin from 'vite-plugin-dts';
|
||||
import { createHtmlPlugin as viteHtmlPlugin } from 'vite-plugin-html';
|
||||
import { libInjectCss as viteLibInjectCss } from 'vite-plugin-lib-inject-css';
|
||||
import { viteMockServe as viteMockPlugin } from 'vite-plugin-mock';
|
||||
import { VitePWA } from 'vite-plugin-pwa';
|
||||
import viteVueDevTools from 'vite-plugin-vue-devtools';
|
||||
|
||||
import { viteExtraAppConfigPlugin } from './extra-app-config';
|
||||
@@ -100,6 +101,8 @@ async function getApplicationConditionPlugins(
|
||||
importmapOptions,
|
||||
injectAppLoading,
|
||||
mock,
|
||||
pwa,
|
||||
pwaOptions,
|
||||
turboConsole,
|
||||
...commonOptions
|
||||
} = options;
|
||||
@@ -125,7 +128,24 @@ async function getApplicationConditionPlugins(
|
||||
},
|
||||
{
|
||||
condition: injectAppLoading,
|
||||
plugins: async () => [await viteInjectAppLoadingPlugin(isBuild, env)],
|
||||
plugins: async () => [await viteInjectAppLoadingPlugin(!!isBuild, env)],
|
||||
},
|
||||
{
|
||||
condition: pwa,
|
||||
plugins: () =>
|
||||
VitePWA({
|
||||
injectRegister: false,
|
||||
workbox: {
|
||||
globPatterns: [],
|
||||
},
|
||||
...pwaOptions,
|
||||
manifest: {
|
||||
display: 'standalone',
|
||||
start_url: '/',
|
||||
theme_color: '#ffffff',
|
||||
...pwaOptions?.manifest,
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
condition: isBuild && !!compress,
|
||||
|
@@ -10,8 +10,8 @@ import { type PluginOption } from 'vite';
|
||||
* 为多app提供loading样式,无需在每个 app -> index.html单独引入
|
||||
*/
|
||||
async function viteInjectAppLoadingPlugin(
|
||||
isBuild: string,
|
||||
env: Record<string, any>,
|
||||
isBuild: boolean,
|
||||
env: Record<string, any> = {},
|
||||
): Promise<PluginOption | undefined> {
|
||||
const loadingHtml = await getLoadingRawByHtmlTemplate();
|
||||
const envRaw = isBuild ? 'prod' : 'dev';
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import type { PluginVisualizerOptions } from 'rollup-plugin-visualizer';
|
||||
import type { PluginOption, UserConfig } from 'vite';
|
||||
import type { ConfigEnv, PluginOption, UserConfig } from 'vite';
|
||||
import type { PluginOptions } from 'vite-plugin-dts';
|
||||
import type { Options as PwaPluginOptions } from 'vite-plugin-pwa';
|
||||
|
||||
import viteTurboConsolePlugin from 'unplugin-turbo-console/vite';
|
||||
|
||||
@@ -68,6 +69,10 @@ interface ApplicationPluginOptions extends CommonPluginOptions {
|
||||
injectAppLoading?: boolean;
|
||||
/** mock 插件配置 */
|
||||
mock?: boolean;
|
||||
/** 是否开启pwa */
|
||||
pwa?: boolean;
|
||||
/** pwa 插件配置 */
|
||||
pwaOptions?: Partial<PwaPluginOptions>;
|
||||
/** turbo-console 插件配置 */
|
||||
turboConsole?: Parameters<typeof viteTurboConsolePlugin>[0] | boolean;
|
||||
}
|
||||
@@ -85,13 +90,15 @@ interface ApplicationOptions extends ApplicationPluginOptions {}
|
||||
interface LibraryOptions extends LibraryPluginOptions {}
|
||||
|
||||
interface DefineApplicationOptions {
|
||||
application?: ApplicationOptions;
|
||||
vite?: UserConfig;
|
||||
application?:
|
||||
| ((config: ConfigEnv) => ApplicationOptions)
|
||||
| ApplicationOptions;
|
||||
vite?: ((config: ConfigEnv) => UserConfig) | UserConfig;
|
||||
}
|
||||
|
||||
interface DefineLibraryOptions {
|
||||
library?: LibraryOptions;
|
||||
vite?: UserConfig;
|
||||
library?: ((config: ConfigEnv) => LibraryOptions) | LibraryOptions;
|
||||
vite?: ((config: ConfigEnv) => UserConfig) | UserConfig;
|
||||
}
|
||||
|
||||
type DefineConfig = {
|
||||
|
Reference in New Issue
Block a user