Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | import { fileURLToPath } from 'node:url'; import type { Esmx } from '@esmx/core'; import { createRspackHtmlApp, rspack } from '@esmx/rspack'; import { VueLoaderPlugin as VueLoader2Plugin } from 'vue-loader-v15'; import { VueLoaderPlugin as VueLoader3Plugin } from 'vue-loader-v17'; import { vue2DevHmrLoader, vue2ServerRenderLoader, vue3ServerRenderLoader } from './loaders'; import type { RspackVueAppOptions } from './vue'; type VueType = '2' | '3'; export function createRspackVueApp( esmx: Esmx, vueType: VueType, options?: RspackVueAppOptions ) { return createRspackHtmlApp(esmx, { ...options, loaders: { styleLoader: fileURLToPath(import.meta.resolve('vue-style-loader')), ...options?.loaders }, chain(context) { const { chain, buildTarget, esmx } = context; const defineVue = <T>({ vue2, vue3 }: { vue2: () => T; vue3: () => T }) => { if (vueType === '2') { return vue2(); } else { return vue3(); } }; chain.resolve.extensions.add('.vue'); defineVue({ vue2: () => { chain.plugin('vue-loader').use(VueLoader2Plugin); }, vue3: () => { chain.plugin('vue-loader').use(VueLoader3Plugin); } }); const vueLoader = fileURLToPath( defineVue({ vue2: () => import.meta.resolve('vue-loader-v15'), vue3: () => import.meta.resolve('vue-loader-v17') }) ); const vueRule = chain.module.rule('vue').test(/\.vue$/); vueRule .use('vue-loader') .loader(vueLoader) .options({ ...options?.vueLoader, experimentalInlineMatchResource: true, optimizeSSR: buildTarget === 'server' }); if (buildTarget === 'server') { defineVue({ vue2: () => { vueRule .use('vue-server-render-loader') .loader(vue2ServerRenderLoader) .before('vue-loader'); }, vue3: () => { vueRule .use('vue-server-render-loader') .loader(vue3ServerRenderLoader) .before('vue-loader'); } }); } defineVue({ vue2: () => { if ( esmx.command === esmx.COMMAND.dev && buildTarget === 'client' ) { vueRule .use('vue2-dev-hmr-loader') .loader(vue2DevHmrLoader) .before('vue-loader'); } }, vue3: () => {} }); defineVue({ vue2: () => { chain.resolve.alias.set( 'vue$', 'vue/dist/vue.runtime.esm.js' ); }, vue3: () => { chain.resolve.alias.set( 'vue$', esmx.isProd ? 'vue/dist/vue.runtime.esm-browser.prod.js' : 'vue/dist/vue.runtime.esm-browser.js' ); } }); if (buildTarget === 'client') { chain.plugin('define-vue-env').use(rspack.DefinePlugin, [ { 'process.env.VUE_ENV': JSON.stringify(buildTarget) } ]); } options?.chain?.(context); } }); } |