feat(): 改为vite

This commit is contained in:
2026-03-16 17:58:57 +08:00
parent cd734d8524
commit 1ccbd4e872
74 changed files with 46574 additions and 2145 deletions
+10566
View File
File diff suppressed because it is too large Load Diff
+53
View File
@@ -0,0 +1,53 @@
{
"name": "@r-utils/vue3",
"version": "1.0.0",
"description": "Vue3 工具",
"type": "module",
"main": "dist/index.cjs",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"sideEffects": false,
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"./*": "./*"
},
"keywords": [
"vue3"
],
"scripts": {
"build": "vite build",
"watch": "vite build --watch",
"lint": "eslint --ext .js,ts --fix src",
"release": "standard-version",
"commit": "cz",
"lint-staged": "lint-staged",
"test": "jest"
},
"license": "ISC",
"dependencies": {
"lodash": "^4.17.21",
"vue": "^3.3.0"
},
"devDependencies": {
"@babel/core": "^7.8.0",
"@babel/preset-env": "^7.12.0",
"@babel/preset-typescript": "^7.21.4",
"@commitlint/config-conventional": "^17.6.1",
"@commitlint/cz-commitlint": "^17.5.0",
"@jest/globals": "^29.7.0",
"babel-jest": "^29.7.0",
"commitizen": "^4.3.0",
"eslint-define-config": "^1.18.0",
"husky": "^8.0.3",
"inquirer": "^8.0.0",
"jest": "^29.7.0",
"lint-staged": "^15.4.0",
"prettier": "^3.4.2",
"standard-version": "^9.5.0"
},
"packageManager": "pnpm@8.15.6"
}
+1
View File
@@ -0,0 +1 @@
export * from "./vue-helper"
+110
View File
@@ -0,0 +1,110 @@
import { ComponentInternalInstance, ComponentPublicInstance } from "vue";
type CustomClassObj = Record<string, boolean>;
type CustomClass = string | Array<string> | CustomClassObj;
type DistCustomClass = Record<string, true>;
export function createCustomClassObj(customClass: string): DistCustomClass;
export function createCustomClassObj(
customClass: Array<string>
): DistCustomClass;
export function createCustomClassObj(
customClass: string | Array<string>
): DistCustomClass {
let customClassObj = <DistCustomClass>{};
if (typeof customClass === "string") {
const customClassStr = customClass.trim().replace(" +", " ");
if (customClassStr.length > 0) {
const customClassEntries = customClassStr
.split(" ")
.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (Array.isArray(customClass)) {
if (customClass.length > 0) {
const customClassEntries = customClass.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else {
throw new TypeError(
`customClass只能是字符串或数组类型,customClass: ${customClass}`
);
}
return customClassObj;
}
/**
* 转换 vue class 为 vue class 对象
* @param sourceClass 原始 class
* @returns
*/
export function convertCustomClass(sourceClass: CustomClass): CustomClassObj {
let customClassObj = <CustomClassObj>{};
if (typeof sourceClass === "string") {
const customClassStr = sourceClass.trim().replace(" +", " ");
if (customClassStr.length > 0) {
const customClassEntries = customClassStr
.split(" ")
.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (Array.isArray(sourceClass)) {
if (sourceClass.length > 0) {
const customClassEntries = sourceClass.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (sourceClass instanceof Object) {
customClassObj = sourceClass;
} else {
throw new TypeError(
`sourceClass不是有效的vue classsourceClass: ${sourceClass}`
);
}
return customClassObj;
}
/**
* 合并 class
* @param customClass vue class
* @returns
*/
export function mergeClass(...customClass: CustomClass[]) {
return customClass
.map((cc) => convertCustomClass(cc))
.reduce((a, b) => Object.assign(a, b));
}
/**
* 发送祖先组件事件
* @param thisArg 调用的源组件实例
* @param componentName 需要触发事件的组件名
* @param eventName 事件名称
* @param params 参数
* @returns
*/
export function dispatch(
thisArg: ComponentPublicInstance,
componentName: ComponentPublicInstance,
eventName: string,
params: unknown
): void {
let parent = thisArg.$parent || thisArg.$root;
if (parent == null) {
return;
}
let name = parent.$options.componentName;
while (parent && (!name || name !== componentName)) {
parent = parent.$parent;
if (parent) {
name = parent.$options.componentName;
}
}
if (parent) {
parent.$emit.call(parent, eventName, params);
}
}
+21
View File
@@ -0,0 +1,21 @@
{
"exclude": ["node_modules", "dist"],
"include": ["src/**/*.ts", "src/**/*.js"],
"compilerOptions": {
"target": "esnext",
"useDefineForClassFields": true,
"module": "esnext",
"moduleResolution": "bundler",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["dom", "esnext"],
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
},
"allowJs": true
}
}
+31
View File
@@ -0,0 +1,31 @@
import { defineConfig } from 'vite';
import dts from 'vite-plugin-dts';
import { resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = fileURLToPath(new URL('.', import.meta.url));
export default defineConfig({
build: {
lib: {
entry: resolve(__dirname, 'src/index.ts'),
formats: ['es', 'cjs'],
fileName: (format) => `index.${format === 'es' ? 'mjs' : 'cjs'}`,
},
rollupOptions: {
external: ['vue', 'lodash'],
},
sourcemap: true,
},
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
plugins: [
dts({
include: ['src'],
outDir: 'dist',
}),
],
});