Merge branch 'main' of https://git.noahlan.cn/n-admin/n-admin-ui-vitesse
# Conflicts: # package.json # pnpm-lock.yaml # src/auto-imports.d.ts # tsconfig.json # vite.config.tsmain
commit
a4b1c68eec
@ -0,0 +1,4 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not dead
|
||||
not ie 11
|
@ -0,0 +1,11 @@
|
||||
# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings
|
||||
|
||||
# Automatically normalize line endings (to LF) for all text-based files.
|
||||
* text=auto eol=lf
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.{cmd,[cC][mM][dD]} text eol=crlf
|
||||
*.{bat,[bB][aA][tT]} text eol=crlf
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary
|
@ -1,10 +1,38 @@
|
||||
.DS_Store
|
||||
.vite-ssg-dist
|
||||
.vite-ssg-temp
|
||||
*.local
|
||||
cypress/downloads
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
node_modules
|
||||
.idea/
|
||||
.cache
|
||||
.turbo
|
||||
|
||||
# local files
|
||||
*.local
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
.eslintcache
|
||||
|
||||
# Log files
|
||||
*.log
|
||||
cypress/downloads
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
# .vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
package-lock.json
|
||||
pnpm-lock.yaml
|
||||
|
||||
.history
|
@ -0,0 +1,35 @@
|
||||
import AutoImport from 'unplugin-auto-import/vite'
|
||||
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
|
||||
|
||||
export default () => {
|
||||
// https://github.com/antfu/unplugin-auto-import
|
||||
return AutoImport({
|
||||
imports: [
|
||||
'vue',
|
||||
'vue-router',
|
||||
'vue-i18n',
|
||||
'vue/macros',
|
||||
'@vueuse/head',
|
||||
'@vueuse/core',
|
||||
{
|
||||
'naive-ui': [
|
||||
'useDialog',
|
||||
'useMessage',
|
||||
'useNotification',
|
||||
'useLoadingBar',
|
||||
],
|
||||
},
|
||||
],
|
||||
dts: 'src/auto-imports.d.ts',
|
||||
dirs: [
|
||||
'src/composables',
|
||||
'src/stores',
|
||||
'src/types',
|
||||
'src/api/**',
|
||||
],
|
||||
vueTemplate: true,
|
||||
resolvers: [
|
||||
NaiveUiResolver(),
|
||||
],
|
||||
})
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
import ViteCompression from 'vite-plugin-compression'
|
||||
|
||||
export default (viteEnv: ImportMetaEnv) => {
|
||||
const { VITE_COMPRESS_TYPE = 'gzip' } = viteEnv
|
||||
return ViteCompression({ algorithm: VITE_COMPRESS_TYPE })
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
import type { PluginOption } from 'vite'
|
||||
import Layouts from 'vite-plugin-vue-layouts'
|
||||
import Pages from 'vite-plugin-pages'
|
||||
import WebfontDownload from 'vite-plugin-webfont-dl'
|
||||
import VueDevTools from 'vite-plugin-vue-devtools'
|
||||
import Unocss from 'unocss/vite'
|
||||
import VueI18n from '@intlify/unplugin-vue-i18n/vite'
|
||||
|
||||
// must
|
||||
import { getRootPath } from 'build/utils'
|
||||
import vueMacros from './vuemacros'
|
||||
import autoImport from './autoimport'
|
||||
import unplugins from './unplugins'
|
||||
|
||||
// select
|
||||
import visualizer from './visualizer'
|
||||
import compress from './compress'
|
||||
import pwa from './pwa'
|
||||
import markdown from './markdown'
|
||||
|
||||
export function setupVitePlugins(viteEnv: ImportMetaEnv): (PluginOption | PluginOption[])[] {
|
||||
const plugins = [
|
||||
vueMacros(),
|
||||
autoImport(),
|
||||
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
|
||||
Layouts(),
|
||||
// https://github.com/hannoeru/vite-plugin-pages
|
||||
Pages({
|
||||
extensions: ['vue', 'md'],
|
||||
}),
|
||||
// https://github.com/feat-agency/vite-plugin-webfont-dl
|
||||
WebfontDownload(),
|
||||
// https://github.com/webfansplz/vite-plugin-vue-devtools
|
||||
VueDevTools(),
|
||||
// https://github.com/antfu/unocss
|
||||
// see uno.config.ts for config
|
||||
Unocss(),
|
||||
// https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n
|
||||
VueI18n({
|
||||
runtimeOnly: true,
|
||||
compositionOnly: true,
|
||||
fullInstall: true,
|
||||
include: [`${getRootPath()}/locales/**`],
|
||||
}),
|
||||
...unplugins(viteEnv),
|
||||
]
|
||||
if (viteEnv.VITE_VISUALIZER)
|
||||
plugins.push(visualizer as PluginOption)
|
||||
|
||||
if (viteEnv.VITE_COMPRESS)
|
||||
plugins.push(compress(viteEnv))
|
||||
|
||||
if (viteEnv.VITE_PWA)
|
||||
plugins.push(pwa())
|
||||
|
||||
if (viteEnv.VITE_MARKDOWN)
|
||||
plugins.push(markdown(viteEnv))
|
||||
|
||||
return plugins
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
import Markdown from 'vite-plugin-vue-markdown'
|
||||
import LinkAttributes from 'markdown-it-link-attributes'
|
||||
import Shiki from 'markdown-it-shiki'
|
||||
|
||||
export default (viteEnv: ImportMetaEnv) => {
|
||||
// https://github.com/antfu/vite-plugin-vue-markdown
|
||||
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
|
||||
return Markdown({
|
||||
wrapperClasses: 'prose prose-sm m-auto text-left',
|
||||
headEnabled: true,
|
||||
markdownItSetup(md) {
|
||||
// https://prismjs.com/
|
||||
md.use(Shiki, {
|
||||
theme: {
|
||||
light: 'vitesse-light',
|
||||
dark: 'vitesse-dark',
|
||||
},
|
||||
})
|
||||
md.use(LinkAttributes, {
|
||||
matcher: (link: string) => /^https?:\/\//.test(link),
|
||||
attrs: {
|
||||
target: '_blank',
|
||||
rel: 'noopener',
|
||||
},
|
||||
})
|
||||
},
|
||||
})
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import { VitePWA } from 'vite-plugin-pwa'
|
||||
|
||||
export default function setupVitePwa() {
|
||||
// https://github.com/antfu/vite-plugin-pwa
|
||||
return VitePWA({
|
||||
registerType: 'autoUpdate',
|
||||
includeAssets: ['favicon.svg', 'safari-pinned-tab.svg'],
|
||||
manifest: {
|
||||
name: 'N-Admin',
|
||||
short_name: 'N-Admin',
|
||||
theme_color: '#ffffff',
|
||||
icons: [
|
||||
{
|
||||
src: '/pwa-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: '/pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: '/pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
purpose: 'any maskable',
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
|
||||
|
||||
export default (viteEnv: ImportMetaEnv) => {
|
||||
return [
|
||||
// https://github.com/antfu/unplugin-vue-components
|
||||
Components({
|
||||
// allow auto load markdown components under `./src/components/`
|
||||
extensions: ['vue', 'md'],
|
||||
// allow auto import and register components used in markdown
|
||||
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
|
||||
dts: 'src/components.d.ts',
|
||||
resolvers: [
|
||||
NaiveUiResolver(),
|
||||
],
|
||||
}),
|
||||
]
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
import { visualizer } from 'rollup-plugin-visualizer'
|
||||
|
||||
export default visualizer({
|
||||
gzipSize: true,
|
||||
brotliSize: true,
|
||||
open: true,
|
||||
})
|
@ -0,0 +1,23 @@
|
||||
import { transformShortVmodel } from '@vue-macros/short-vmodel'
|
||||
import Vue from '@vitejs/plugin-vue'
|
||||
|
||||
// @ts-expect-error failed to resolve types
|
||||
import VueMacros from 'unplugin-vue-macros/vite'
|
||||
|
||||
export default () => {
|
||||
return VueMacros({
|
||||
plugins: {
|
||||
vue: Vue({
|
||||
include: [/\.vue$/, /\.md$/],
|
||||
reactivityTransform: true,
|
||||
template: {
|
||||
compilerOptions: {
|
||||
nodeTransforms: [
|
||||
transformShortVmodel({ prefix: '::' }),
|
||||
],
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
})
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,36 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
interface ImportMetaEnv {
|
||||
/** 项目基本地址 */
|
||||
readonly VITE_BASE_URL: string
|
||||
/** 项目名称 */
|
||||
readonly VITE_APP_NAME: string
|
||||
/** 项目标题 */
|
||||
readonly VITE_APP_TITLE: string
|
||||
/** 项目描述 */
|
||||
readonly VITE_APP_DESC: string
|
||||
|
||||
/** API访问地址 */
|
||||
readonly VITE_API_URL: string
|
||||
/** 上传地址 */
|
||||
readonly VITE_UPLOAD_URL: string
|
||||
/** API前缀 */
|
||||
readonly VITE_API_URL_PREFIX: string
|
||||
|
||||
/** 开启请求代理 */
|
||||
readonly VITE_HTTP_PROXY: boolean
|
||||
/** 是否开启打包文件大小结果分析 */
|
||||
readonly VITE_VISUALIZER: boolean
|
||||
/** 是否开启打包压缩 */
|
||||
readonly VITE_COMPRESS: boolean
|
||||
/** 压缩算法类型 */
|
||||
readonly VITE_COMPRESS_TYPE: 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'
|
||||
/** 是否应用pwa */
|
||||
readonly VITE_PWA: boolean
|
||||
/** 是否启用Markdown插件,markdown生成html */
|
||||
readonly VITE_MARKDOWN: boolean
|
||||
// 是否开启Mock
|
||||
readonly VITE_USE_MOCK:boolean
|
||||
// public path
|
||||
readonly VITE_PUBLIC_PATH:string
|
||||
// 全局项目标题
|
||||
readonly VITE_TITLE:string
|
||||
// API访问地址
|
||||
readonly VITE_API_URL:string
|
||||
// 上传地址
|
||||
readonly VITE_UPLOAD_URL:string
|
||||
// API前缀
|
||||
readonly VITE_API_URL_PREFIX:string
|
||||
// 项目描述
|
||||
readonly VITE_DESCRIPTION:string
|
||||
readonly VITE_OPEN_MOCK: boolean
|
||||
}
|
||||
|
||||
interface ImportMeta {readonly env: ImportMetaEnv}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "https://turborepo.org/schema.json",
|
||||
"pipeline": {
|
||||
"build": {
|
||||
"dependsOn": ["^build"],
|
||||
"outputs": ["dist/**"]
|
||||
},
|
||||
"stub": {},
|
||||
"lint": {},
|
||||
"clean": {
|
||||
"cache": false
|
||||
},
|
||||
"dev": {
|
||||
"cache": false,
|
||||
"persistent": true
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue