chore: Resolve merge conflicts

pull/48/MERGE
vben 2024-07-31 21:26:54 +08:00
parent 4074a88c13
commit 082847c441
44 changed files with 772 additions and 475 deletions

2
.github/CODEOWNERS vendored
View File

@ -3,3 +3,5 @@
# vben core onwer
/packages/@core/ anncwb@126.com
/internal/ anncwb@126.com
/scripts/ anncwb@126.com

View File

@ -49,6 +49,14 @@ jobs:
password: ${{ secrets.WEB_ANTD_FTP_PASSWORD }}
local-dir: ./apps/web-antd/dist/
- name: Sync Web Naive files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEB_NAIVE_FTP_ACCOUNT }}
password: ${{ secrets.WEB_NAIVE_FTP_PASSWORD }}
local-dir: ./apps/web-naive/dist/
- name: Sync Website files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:

View File

@ -44,7 +44,7 @@
"ant-design-vue": "^4.2.3",
"dayjs": "^1.11.12",
"pinia": "2.1.7",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

View File

@ -21,7 +21,7 @@
(function () {
var hm = document.createElement('script');
hm.src =
'https://hm.baidu.com/hm.js?d20a01273820422b6aa2ee41b6c9414d';
'https://hm.baidu.com/hm.js?24bb3eb91dfe4ebfcbcee6952a107cb6';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();

View File

@ -43,7 +43,7 @@
"@vueuse/core": "^10.11.0",
"naive-ui": "^2.39.0",
"pinia": "2.1.7",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

View File

@ -14,6 +14,7 @@
"lucide",
"brotli",
"defu",
"execa",
"iconify",
"intlify",
"mkdist",

View File

@ -27,7 +27,7 @@
}
},
"dependencies": {
"eslint-config-turbo": "^2.0.9",
"eslint-config-turbo": "^2.0.10",
"eslint-plugin-command": "^0.2.3",
"eslint-plugin-import-x": "^3.1.0"
},
@ -39,7 +39,7 @@
"eslint": "^9.8.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-jsdoc": "^48.10.1",
"eslint-plugin-jsdoc": "^48.10.2",
"eslint-plugin-jsonc": "^2.16.0",
"eslint-plugin-n": "^17.10.1",
"eslint-plugin-no-only-tests": "^3.1.0",

View File

@ -30,13 +30,20 @@
"dependencies": {
"@changesets/git": "^3.0.0",
"@manypkg/get-packages": "^2.2.2",
"chalk": "^5.3.0",
"consola": "^3.2.3",
"dayjs": "^1.11.12",
"execa": "^9.3.0",
"find-up": "^7.0.0",
"fs-extra": "^11.2.0",
"nanoid": "^5.0.7",
"ora": "^8.0.1",
"pkg-types": "^1.1.3",
"prettier": "^3.3.3",
"rimraf": "^6.0.1",
"zx": "^8.1.4"
"rimraf": "^6.0.1"
},
"devDependencies": {
"@types/chalk": "^2.2.0",
"@types/fs-extra": "^11.0.4"
}
}

View File

@ -1,24 +1,32 @@
import path from 'node:path';
import { $ } from 'zx';
import { execa } from 'execa';
export * from '@changesets/git';
/**
*
*/
async function getStagedFiles() {
async function getStagedFiles(): Promise<string[]> {
try {
$.verbose = false;
const { stdout: lines } =
await $`git -c submodule.recurse=false diff --staged --diff-filter=ACMR --name-only --ignore-submodules -z`;
const { stdout } = await execa('git', [
'-c',
'submodule.recurse=false',
'diff',
'--staged',
'--diff-filter=ACMR',
'--name-only',
'--ignore-submodules',
'-z',
]);
let changedList = lines ? lines.replace(/\0$/, '').split('\0') : [];
let changedList = stdout ? stdout.replace(/\0$/, '').split('\0') : [];
changedList = changedList.map((item) => path.resolve(process.cwd(), item));
const changedSet = new Set(changedList);
changedSet.delete('');
return [...changedSet];
} catch {
} catch (error) {
console.error('Failed to get staged files:', error);
return [];
}
}

View File

@ -6,9 +6,12 @@ export { generatorContentHash } from './hash';
export * from './monorepo';
export { toPosixPath } from './path';
export { prettierFormat } from './prettier';
export * from './spinner';
export type { Package } from '@manypkg/get-packages';
export { default as colors } from 'chalk';
export { consola } from 'consola';
export * from 'execa';
export { default as fs } from 'fs-extra';
export { nanoid } from 'nanoid';
export { type PackageJson, readPackageJSON } from 'pkg-types';
export { rimraf } from 'rimraf';
export { $, chalk as colors, fs, spinner } from 'zx';

View File

@ -1,5 +1,5 @@
import fs from 'fs-extra';
import { format, getFileInfo, resolveConfig } from 'prettier';
import { fs } from 'zx';
async function prettierFormat(filepath: string) {
const prettierOptions = await resolveConfig(filepath, {});

View File

@ -0,0 +1,24 @@
import ora, { Ora } from 'ora';
interface SpinnerOptions {
failedText?: string;
successText?: string;
title: string;
}
export async function spinner<T>(
{ failedText, successText, title }: SpinnerOptions,
callback: () => Promise<T>,
): Promise<T> {
const loading: Ora = ora(title).start();
try {
const result = await callback();
loading.succeed(successText || 'Success!');
return result;
} catch (error) {
loading.fail(failedText || 'Failed!');
throw error;
} finally {
loading.stop();
}
}

View File

@ -32,7 +32,6 @@
"cheerio": "1.0.0-rc.12",
"html-minifier-terser": "^7.2.0",
"nitropack": "^2.9.7",
"portfinder": "^1.0.32",
"resolve.exports": "^2.0.2",
"vite-plugin-lib-inject-css": "^2.1.1",
"vite-plugin-pwa": "^0.20.1",

View File

@ -5,7 +5,6 @@ import type { NitroMockPluginOptions } from '../typing';
import { colors, consola, getPackage } from '@vben/node-utils';
import { build, createDevServer, createNitro, prepare } from 'nitropack';
import portfinder from 'portfinder';
const hmrKeyRe = /^runtimeConfig\.|routeRules\./;
@ -78,11 +77,6 @@ async function runNitroServer(rootDir: string, port: number, verbose: boolean) {
nitro.hooks.hookOnce('restart', reload);
const server = createDevServer(nitro);
// 端口已经存在
const availablePort = await portfinder.getPortPromise({ port });
if (availablePort !== port) {
return;
}
await server.listen(port, { showURL: false });
await prepare(nitro);
await build(nitro);
@ -92,5 +86,5 @@ async function runNitroServer(rootDir: string, port: number, verbose: boolean) {
consola.success(colors.bold(colors.green('Nitro Mock Server started.')));
}
};
await reload();
return await reload();
}

View File

@ -6,12 +6,12 @@
"monorepo",
"turbo",
"vben",
"vue vben admin",
"vue vben admin pro",
"vben admin",
"vben pro",
"vue",
"vue admin",
"vue vben admin",
"vue vben admin pro",
"vue3"
],
"homepage": "https://github.com/vbenjs/vue-vben-admin",
@ -27,30 +27,30 @@
"scripts": {
"bootstrap": "pnpm install",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build",
"preview": "turbo preview",
"build:analyze": "turbo build:analyze",
"build:docker": "./build-local-docker-image.sh",
"changeset": "pnpm exec changeset",
"check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type",
"check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type && pnpm check:cspell",
"check:circular": "vsh check-circular",
"check:cspell": "cspell lint **/*.ts **/README.md .changeset/*.md --no-progress",
"check:dep": "vsh check-dep",
"check:type": "turbo run typecheck",
"clean": "vsh clean",
"commit": "czg",
"dev": "turbo-run dev",
"dev:antd": "pnpm -F @vben/web-antd",
"dev:ele": "pnpm -F @vben/web-ele",
"dev:naive": "pnpm -F @vben/web-naive",
"dev:docs": "pnpm -F @vben/website run docs:dev",
"dev:antd": "pnpm -F @vben/web-antd run dev",
"dev:docs": "pnpm -F @vben/website run dev",
"dev:ele": "pnpm -F @vben/web-ele run dev",
"dev:naive": "pnpm -F @vben/web-naive run dev",
"format": "vsh lint --format",
"lint": "vsh lint",
"postinstall": "turbo run stub",
"preinstall": "npx only-allow pnpm",
"prepare": "is-ci || husky",
"preview": "turbo-run preview",
"publint": "vsh publint",
"reinstall": "pnpm clean --del-lock && pnpm bootstrap",
"test:unit": "vitest",
"turbo-run": "turbo-run",
"update:deps": " pnpm update --latest --recursive",
"version": "pnpm exec changeset version && pnpm install --no-frozen-lockfile"
},
@ -78,11 +78,11 @@
"is-ci": "^3.0.1",
"jsdom": "^24.1.1",
"rimraf": "^6.0.1",
"turbo": "^2.0.9",
"turbo": "^2.0.10",
"typescript": "^5.5.4",
"unbuild": "^2.0.0",
"vite": "^5.3.5",
"vitest": "^2.0.4",
"vitest": "^2.0.5",
"vue-tsc": "^2.0.29"
},
"engines": {
@ -91,10 +91,16 @@
},
"packageManager": "pnpm@9.6.0",
"pnpm": {
"peerDependencyRules": {
"allowedVersions": {
"eslint": "*",
"@typescript-eslint/eslint-plugin": "*"
}
},
"overrides": {
"@ctrl/tinycolor": "^4.1.0",
"clsx": "^2.1.1",
"vue": "^3.4.34"
"vue": "^3.4.35"
},
"neverBuiltDependencies": [
"canvas",

View File

@ -36,6 +36,6 @@
"dependencies": {
"@iconify/vue": "^4.1.2",
"lucide-vue-next": "^0.417.0",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -56,7 +56,7 @@
},
"dependencies": {
"@ctrl/tinycolor": "^4.1.0",
"@vue/shared": "^3.4.34",
"@vue/shared": "^3.4.35",
"clsx": "^2.1.1",
"defu": "^6.1.4",
"lodash.clonedeep": "^4.5.0",

View File

@ -38,7 +38,7 @@
}
},
"dependencies": {
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

View File

@ -39,7 +39,7 @@
"@vueuse/core": "^10.11.0",
"radix-vue": "^1.9.2",
"sortablejs": "^1.15.2",
"vue": "^3.4.34"
"vue": "^3.4.35"
},
"devDependencies": {
"@types/sortablejs": "^1.15.8"

View File

@ -32,6 +32,6 @@
"@vben-core/shared": "workspace:*",
"@vben-core/typings": "workspace:*",
"@vueuse/core": "^10.11.0",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -42,6 +42,6 @@
"@vben-core/shadcn-ui": "workspace:*",
"@vben-core/typings": "workspace:*",
"@vueuse/core": "^10.11.0",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -43,6 +43,6 @@
"@vben-core/shared": "workspace:*",
"@vben-core/typings": "workspace:*",
"@vueuse/core": "^10.11.0",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -50,6 +50,6 @@
"class-variance-authority": "^0.7.0",
"lucide-vue-next": "^0.417.0",
"radix-vue": "^1.9.2",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -41,6 +41,6 @@
"@vben-core/icons": "workspace:*",
"@vben-core/shadcn-ui": "workspace:*",
"@vben-core/typings": "workspace:*",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -24,6 +24,6 @@
"@vben/stores": "workspace:*",
"@vben/types": "workspace:*",
"@vben/utils": "workspace:*",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -23,6 +23,6 @@
"@vben/preferences": "workspace:*",
"@vueuse/core": "^10.11.0",
"echarts": "^5.5.1",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -28,7 +28,7 @@
"@vben/types": "workspace:*",
"@vueuse/integrations": "^10.11.0",
"qrcode": "^1.5.3",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
},
"devDependencies": {

View File

@ -24,7 +24,7 @@
"@vben/preferences": "workspace:*",
"@vben/stores": "workspace:*",
"@vben/types": "workspace:*",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0",
"watermark-js-plus": "^1.5.2"
}

View File

@ -33,7 +33,7 @@
"@vben/types": "workspace:*",
"@vben/utils": "workspace:*",
"@vueuse/core": "^10.11.0",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

View File

@ -22,8 +22,7 @@
"dependencies": {
"@vben/locales": "workspace:*",
"@vben/utils": "workspace:*",
"axios": "^1.7.2",
"vue-request": "^2.0.4"
"axios": "^1.7.2"
},
"devDependencies": {
"axios-mock-adapter": "^1.22.0"

View File

@ -1,3 +1,2 @@
export * from './request-client';
export * from './use-request';
export * from 'axios';

View File

@ -1,11 +0,0 @@
// import { setGlobalOptions, } from 'vue-request';
// setGlobalOptions({
// manual: true,
// // ...
// });
/**
* @see https://www.attojs.com/guide/documentation/globalOptions.html
*/
export * from 'vue-request';

View File

@ -21,7 +21,7 @@
},
"dependencies": {
"@intlify/core-base": "^9.13.1",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-i18n": "^9.13.1"
}
}

View File

@ -24,7 +24,7 @@
"@vben-core/typings": "workspace:*",
"pinia": "2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

View File

@ -21,7 +21,7 @@
},
"dependencies": {
"@vben-core/typings": "workspace:*",
"vue": "^3.4.34",
"vue": "^3.4.35",
"vue-router": "^4.4.0"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
# @vben/vsh
# @vben/turbo-run
shell 脚本工具集合
turbo-run is a command line tool that allows you to run multiple commands in parallel.

View File

@ -1,10 +1,6 @@
import type { Package } from '@vben/node-utils';
import { execaCommand, getPackages } from '@vben/node-utils';
import { join } from 'node:path';
import { $, fs, getPackages } from '@vben/node-utils';
import { cancel, isCancel, multiselect } from '@clack/prompts';
import { cancel, isCancel, select } from '@clack/prompts';
interface RunOptions {
command?: string;
@ -12,35 +8,45 @@ interface RunOptions {
export async function run(options: RunOptions) {
const { command } = options;
if (!command) {
console.error('Please enter the command to run');
process.exit(1);
}
const { packages } = await getPackages();
const appPkgs = await findApps(process.cwd(), packages);
// const appPkgs = await findApps(process.cwd(), packages);
// const websitePkg = packages.find(
// (item) => item.packageJson.name === '@vben/website',
// );
const selectApps = await multiselect<any, string>({
message: `Select the app you need to run [${command}]:`,
options: appPkgs.map((item) => ({ label: item, value: item })),
required: true,
// 只显示有对应命令的包
const selectPkgs = packages.filter((pkg) => {
return (pkg?.packageJson as Record<string, any>).scripts?.[command];
});
if (isCancel(selectApps)) {
const selectPkg = await select<any, string>({
message: `Select the app you need to run [${command}]:`,
options: selectPkgs.map((item) => ({
label: item?.packageJson.name,
value: item?.packageJson.name,
})),
});
if (isCancel(selectPkg) || !selectPkg) {
cancel('👋 Has cancelled');
process.exit(0);
}
if (selectApps.length === 1) {
$.verbose = true;
// 让控制台显示颜色
process.env.FORCE_COLOR = '1';
await $`pnpm --filter=${selectApps[0]} run ${command} `;
return;
}
const filters = [];
for (const app of selectApps) {
filters.push(`--filter=${app}`);
}
$.verbose = true;
// 让控制台显示颜色
process.env.FORCE_COLOR = '1';
await $`turbo run ${command} ${filters}`;
execaCommand(`pnpm --filter=${selectPkg} run ${command}`, {
stdio: 'inherit',
});
// const filters = [];
// for (const app of selectApps) {
// filters.push(`--filter=${app}`);
// }
// $.verbose = true;
// execaCommand(`turbo run ${command} ${filters}`, {
// stdio: 'inherit',
// });
}
/**
@ -48,16 +54,12 @@ export async function run(options: RunOptions) {
* @param root
* @param packages
*/
async function findApps(root: string, packages: Package[]) {
// apps内的
const appPackages = packages
.filter((pkg) => {
const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
})
.map((pkg) => {
return pkg.packageJson.name;
});
// async function findApps(root: string, packages: Package[]) {
// // apps内的
// const appPackages = packages.filter((pkg) => {
// const viteConfigExists = fs.existsSync(join(pkg.dir, 'vite.config.mts'));
// return pkg.dir.startsWith(join(root, 'apps')) && viteConfigExists;
// });
return appPackages;
}
// return appPackages;
// }

View File

@ -2,13 +2,7 @@ import type { CAC } from 'cac';
import { join } from 'node:path';
import {
colors,
consola,
getPackages,
rimraf,
spinner,
} from '@vben/node-utils';
import { colors, getPackages, rimraf, spinner } from '@vben/node-utils';
const CLEAN_DIRS = ['dist', 'node_modules', '.turbo'];
@ -38,10 +32,15 @@ async function runClean({
const cleanDirsText = JSON.stringify(cleanDirs);
spinner(`${colors.dim(cleanDirsText)} cleaning in progress...`, async () => {
await clean({ delLock, dirs: cleanDirs, recursive });
consola.success(colors.green(`clean up all \`${cleanDirsText}\` success.`));
});
spinner(
{
successText: colors.green(`clean up all \`${cleanDirsText}\` success.`),
title: `${colors.dim(cleanDirsText)} cleaning in progress...`,
},
async () => {
await clean({ delLock, dirs: cleanDirs, recursive });
},
);
}
async function clean({ delLock, dirs = [], recursive }: CleanCommandOptions) {

View File

@ -1,6 +1,6 @@
import type { CAC } from 'cac';
import { $ } from '@vben/node-utils';
import { execaCommand } from '@vben/node-utils';
interface LintCommandOptions {
/**
@ -10,21 +10,31 @@ interface LintCommandOptions {
}
async function runLint({ format }: LintCommandOptions) {
process.env.FORCE_COLOR = '3';
// process.env.FORCE_COLOR = '3';
if (format) {
await $`stylelint "**/*.{vue,css,less.scss}" --cache --fix`;
await $`eslint . --cache --fix`;
await $`prettier . --write --cache --log-level warn`;
await execaCommand(`stylelint "**/*.{vue,css,less.scss}" --cache --fix`, {
stdio: 'inherit',
});
await execaCommand(`eslint . --cache --fix`, {
stdio: 'inherit',
});
await execaCommand(`prettier . --write --cache --log-level warn`, {
stdio: 'inherit',
});
return;
}
$.verbose = true;
await Promise.all([
$`cspell lint "**/*.ts" "**/README.md" ".changeset/*.md" --no-progress`,
$`eslint . --cache`,
execaCommand(`eslint . --cache`, {
stdio: 'inherit',
}),
// $`ls-lint`,
$`prettier . --ignore-unknown --check --cache`,
$`stylelint "**/*.{vue,css,less.scss}" --cache`,
execaCommand(`prettier . --ignore-unknown --check --cache`, {
stdio: 'inherit',
}),
execaCommand(`stylelint "**/*.{vue,css,less.scss}" --cache`, {
stdio: 'inherit',
}),
]);
}

View File

@ -162,7 +162,15 @@ function nav(): DefaultTheme.NavItem[] {
items: [
{
link: 'https://www.vben.pro',
text: '完整版(Ant Design Vue)',
text: 'Ant Design Vue 版本(默认)',
},
{
link: 'https://naive.vben.pro',
text: 'Naive 版本',
},
{
link: 'https://ele.vben.pro',
text: 'Element Plus版本',
},
],
},
@ -184,6 +192,10 @@ function nav(): DefaultTheme.NavItem[] {
link: 'https://github.com/vbenjs/vue-vben-admin/releases',
text: '更新日志',
},
{
link: 'https://github.com/orgs/vbenjs/projects/5',
text: '路线图',
},
{
link: 'https://github.com/vbenjs/vue-vben-admin/blob/main/.github/contributing.md',
text: '贡献',
@ -220,11 +232,6 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
text: '为什么选择我们?',
},
{ link: 'introduction/quick-start', text: '快速开始' },
{
link: 'https://github.com/vbenjs/vue-vben-admin/releases',
text: '更新日志',
},
{ link: 'https://github.com/orgs/vbenjs/projects/5', text: '路线图' },
],
},
{
@ -251,6 +258,7 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
{ link: 'in-depth/features', text: '常用功能' },
{ link: 'in-depth/check-updates', text: '检查更新' },
{ link: 'in-depth/loading', text: '全局loading' },
{ link: 'in-depth/ui-framework', text: '组件库切换' },
],
},
{

View File

@ -4,7 +4,7 @@
"private": true,
"scripts": {
"build": "vitepress build",
"docs:dev": "vitepress dev",
"dev": "vitepress dev",
"docs:preview": "vitepress preview"
},
"dependencies": {
@ -13,6 +13,6 @@
"devDependencies": {
"@vite-pwa/vitepress": "^0.5.0",
"vitepress": "^1.3.1",
"vue": "^3.4.34"
"vue": "^3.4.35"
}
}

View File

@ -50,14 +50,18 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
"bootstrap": "pnpm install",
// 构建项目
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build",
// 构建项目并分析
"build:analyze": "turbo build:analyze",
// 构建docker镜像
"build:docker": "./build-local-docker-image.sh",
// changeset 版本管理
"changeset": "pnpm exec changeset",
// 检查项目各种问题
"check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type",,
"check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type && pnpm check:cspell",
// 检查循环引用
"check:circular": "vsh check-circular",
// 检查拼写
"check:cspell": "cspell lint **/*.ts **/README.md .changeset/*.md --no-progress"
// 检查依赖
"check:dep": "vsh check-dep",
// 检查类型
@ -67,9 +71,15 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
// 提交代码
"commit": "czg",
// 启动项目默认会运行整个仓库所有包的dev脚本
"dev": "cross-env TURBO_UI=1 turbo run dev",
"dev": "turbo-run dev",
// 启动web-antd应用
"dev:antd": "pnpm -F @vben/web-antd run dev",
// 启动文档
"dev:docs": "pnpm -F @vben/website run docs:dev",
"dev:docs": "pnpm -F @vben/website run dev",
// 启动 element plus应用
"dev:ele": "pnpm -F @vben/web-ele run dev",
// 启动web-naive应用
"dev:naive": "pnpm -F @vben/web-naive run dev",
// 格式化代码
"format": "vsh lint --format",
// lint 代码
@ -80,6 +90,8 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
"preinstall": "npx only-allow pnpm",
// husky的安装
"prepare": "is-ci || husky",
// 预览应用
"preview": "turbo-run preview",
// 包规范检查
"publint": "vsh publint",
// 删除所有的node_modules、yarn.lock、package.lock.json重新安装依赖
@ -96,12 +108,33 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
## 本地运行项目
如需本地运行文档,并进行调整,可以执行以下命令:
如需本地运行文档,并进行调整,可以执行以下命令,执行该命令,你可以选择需要的应用进行开发
```bash
pnpm dev
```
如果你想直接运行某个应用,可以执行以下命令:
运行 `web-antd` 应用:
```bash
pnpm dev:antd
```
运行 `web-naive` 应用:
```bash
pnpm dev:naive
```
运行 `website` 应用:
```bash
pnpm dev:docs
```
## DevTools
项目内置了 [Vue DevTools](https://github.com/vuejs/devtools-next) 插件,可以在开发过程中使用。默认关闭,可在`.env.development` 内开启,并重新运行项目即可:

View File

@ -0,0 +1,16 @@
# 组件库切换
`Vue Admin` 支持你自由选择组件库,目前演示站点的默认组件库是 `Ant Design Vue`,与旧版本保持一致。同时框架还内置了 `Element Plus` 版本和 `Naive UI` 版本,你可以根据自己的喜好选择。
## 新增组件库应用
如果你想用其他别的组件库,你只需要按一下步骤进行操作:
1. 在`apps`内创建一个新的文件夹,例如`apps/web-xxx`。
2. 更改`apps/web-xxx/package.json`的`name`字段为`web-xxx`。
3. 移除其他组件库依赖及代码,并用你的组件库进行替换相应逻辑,需要改动的地方不多。
4. 调整`locales`内的语言文件。
5. 调整 `app.vue` 内的组件。
6. 自行适配组件库的主题,与 `Vben Admin` 契合。
7. 调整 `.env` 内的应用名
8. 在大仓根目录增加 `dev:xxx` 脚本