diff --git a/packages/vue3/build/broswer-vendors.js b/packages/vue3/build/broswer-vendors.js new file mode 100644 index 00000000..b04bd14c --- /dev/null +++ b/packages/vue3/build/broswer-vendors.js @@ -0,0 +1,63 @@ +const path = require('path'); +const { defineConfig } = require('@rspack/cli'); + +const root = path.resolve(__dirname, '..'); + +const targets = ['last 2 versions', '> 0.2%', 'not dead', 'Firefox ESR']; + +exports.vendorConfig = (type) => + defineConfig({ + mode: 'production', + devtool: 'source-map', + entry: { + index: [path.resolve(__dirname, '../src/broswer-vendors.ts')], + }, + target: 'web', + output: { + publicPath: '/', + path: path.resolve(root, `dist/${type}`), + filename: `broswer-vendors.js`, + library: { + name: 'LcapBrowserVendors', + type: 'umd', + umdNamedDefine: true, + }, + }, + module: { + rules: [ + { + test: /\.[mc]?js$/, + type: 'javascript/auto', + use: [ + { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'ecmascript', + }, + }, + }, + }, + ], + }, + { + test: /\.ts$/, + use: [ + { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + }, + }, + env: { targets }, + }, + }, + ], + }, + ], + }, + stats: 'minimal', + }); diff --git a/packages/vue3/build/rspack.config.js b/packages/vue3/build/rspack.config.js index 46fbad89..8c809099 100644 --- a/packages/vue3/build/rspack.config.js +++ b/packages/vue3/build/rspack.config.js @@ -2,6 +2,7 @@ const path = require('path'); const { defineConfig } = require('@rspack/cli'); const rspack = require('@rspack/core'); const { VueLoaderPlugin } = require('vue-loader'); +const { vendorConfig } = require('./broswer-vendors'); const root = path.resolve(__dirname, '..'); const library = 'cloudAdminDesigner'; @@ -116,4 +117,4 @@ const baseConfig = (type) => stats: 'minimal', }); -module.exports = [baseConfig('pc'), baseConfig('mobile')]; +module.exports = [baseConfig('pc'), baseConfig('mobile'), vendorConfig('pc'), vendorConfig('mobile')]; diff --git a/packages/vue3/source/src/hooks/datasource-utils.js b/packages/vue3/source/src/hooks/datasource-utils.js index deef334b..50cb5009 100644 --- a/packages/vue3/source/src/hooks/datasource-utils.js +++ b/packages/vue3/source/src/hooks/datasource-utils.js @@ -1,4 +1,4 @@ -import _isEqual from 'lodash/isEqual'; +import { isEqual } from 'lodash'; export function useDataSourceUtils() { const cache = new Map(); @@ -12,7 +12,7 @@ export function useDataSourceUtils() { // null 直接比较 if (a === null || b === null) return a === b; if (typeof a === 'object') { - return _isEqual(a, b); + return isEqual(a, b); } return Object.is(a, b); }); diff --git a/packages/vue3/src/broswer-vendors.ts b/packages/vue3/src/broswer-vendors.ts new file mode 100644 index 00000000..0249b0dc --- /dev/null +++ b/packages/vue3/src/broswer-vendors.ts @@ -0,0 +1,24 @@ +import * as Vue from 'vue'; +import * as VueRouter from 'vue-router'; +import * as Pinia from 'pinia'; +import * as VueI18n from 'vue-i18n'; +import * as VueCompilerSFC from 'vue/compiler-sfc'; +import lodash from 'lodash'; + +declare global { + interface Window { + Vue: typeof Vue; + VueRouter: typeof VueRouter; + Pinia: typeof Pinia; + VueI18n: typeof VueI18n; + VueCompilerSFC: typeof VueCompilerSFC; + Lodash: typeof lodash; + } +} + +window.Vue = Vue; +window.VueRouter = VueRouter; +window.Pinia = Pinia; +window.VueI18n = VueI18n; +window.VueCompilerSFC = VueCompilerSFC; +window.Lodash = lodash;