ci: optimize package build

This commit is contained in:
pengzhanbo 2024-07-19 03:16:43 +08:00
parent 4325c27968
commit 9f341b131e
23 changed files with 1171 additions and 174 deletions

View File

@ -14,7 +14,7 @@
"vuepress-theme-plume"
],
"engines": {
"node": "^18.19.0 || >=20.0.0",
"node": "^18.20.0 || >=20.0.0",
"pnpm": ">=9"
},
"scripts": {
@ -23,7 +23,7 @@
"clean": "pnpm -r --stream clean",
"dev": "pnpm --stream '/(dev:package|docs:dev)/'",
"dev:package": "pnpm --parallel dev",
"docs:dev": "pnpm -F=docs docs:dev",
"docs:dev": "wait-on -d 100 theme/lib/node/index.js && pnpm -F=docs docs:dev",
"docs:build": "pnpm -F=docs docs:build",
"docs:clean": "pnpm -F=docs docs:clean",
"docs:serve": "pnpm -F=docs docs:serve",
@ -55,7 +55,9 @@
"rimraf": "^6.0.1",
"stylelint": "^16.7.0",
"tsconfig-vuepress": "^4.5.0",
"typescript": "^5.5.3"
"tsup": "^8.1.2",
"typescript": "^5.5.3",
"wait-on": "^7.2.0"
},
"lint-staged": {
"*": "eslint --fix"

View File

@ -31,10 +31,10 @@
"lib"
],
"scripts": {
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png}\" lib",
"ts": "tsc -b tsconfig.build.json"
"tsup": "tsup --config tsup.config.ts"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"

View File

@ -0,0 +1,12 @@
import { defineClientConfig } from 'vuepress/client'
import type { ClientConfig } from 'vuepress/client'
import { Content } from './components/Content.js'
export default defineClientConfig({
enhance({ app }) {
if (app._context.components.Content)
delete app._context.components.Content
app.component('Content', Content)
},
}) as ClientConfig

View File

@ -1,8 +0,0 @@
{
"extends": "../tsconfig.build.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib"
},
"include": ["./src"]
}

View File

@ -0,0 +1,52 @@
import { type Options, defineConfig } from 'tsup'
const clientExternal: (string | RegExp)[] = [
/.*\.vue$/,
/.*\.css$/,
]
export default defineConfig(() => {
const DEFAULT_OPTIONS: Options = {
dts: true,
sourcemap: false,
splitting: false,
format: 'esm',
}
return [
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
target: 'node18',
},
// client/composables/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/composables/index.ts'],
outDir: './lib/client/composables',
external: clientExternal,
},
// client/components/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/components/Content.ts'],
outDir: './lib/client/components',
external: [...clientExternal, '../composables/index.js'],
},
// client/config.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/config.ts'],
outDir: './lib/client',
external: [...clientExternal, './components/Content.js'],
},
// client/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/index.ts'],
outDir: './lib/client',
external: [...clientExternal, './components/Content.js', './composables/index.js'],
},
]
})

View File

@ -27,10 +27,10 @@
"lib"
],
"scripts": {
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png,woff2}\" lib",
"ts": "tsc -b tsconfig.build.json"
"tsup": "tsup --config tsup.config.ts"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"

View File

@ -1,8 +0,0 @@
{
"extends": "../tsconfig.build.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib"
},
"include": ["./src"]
}

View File

@ -0,0 +1,31 @@
import { type Options, defineConfig } from 'tsup'
const clientExternal: (string | RegExp)[] = [
/.*\.vue$/,
/.*\.css$/,
]
export default defineConfig(() => {
const DEFAULT_OPTIONS: Options = {
dts: true,
sourcemap: false,
splitting: false,
format: 'esm',
}
return [
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
target: 'node18',
},
// client/config.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/config.ts'],
outDir: './lib/client',
external: clientExternal,
},
]
})

View File

@ -19,10 +19,6 @@
"types": "./lib/node/index.d.ts",
"import": "./lib/node/index.js"
},
"./client": {
"types": "./lib/client/index.d.ts",
"import": "./lib/client/index.js"
},
"./package.json": "./package.json"
},
"main": "lib/node/index.js",
@ -31,10 +27,10 @@
"lib"
],
"scripts": {
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png}\" lib",
"ts": "tsc -b tsconfig.build.json"
"tsup": "tsup --config tsup.config.ts"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"

View File

@ -1,8 +0,0 @@
{
"extends": "../tsconfig.build.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib"
},
"include": ["./src"]
}

View File

@ -0,0 +1,38 @@
import { type Options, defineConfig } from 'tsup'
const clientExternal: (string | RegExp)[] = [
/.*\.vue$/,
/.*\.css$/,
]
export default defineConfig(() => {
const DEFAULT_OPTIONS: Options = {
dts: true,
sourcemap: false,
splitting: false,
format: 'esm',
}
return [
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
target: 'node18',
},
// client/composables/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/composables/index.ts'],
outDir: './lib/client/composables',
external: clientExternal,
},
// client/config.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/config.ts'],
outDir: './lib/client',
external: clientExternal,
},
]
})

View File

@ -31,10 +31,10 @@
"lib"
],
"scripts": {
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png}\" lib",
"ts": "tsc -b tsconfig.build.json"
"tsup": "tsup --config tsup.config.ts"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"

View File

@ -1,14 +0,0 @@
{
"extends": "../tsconfig.build.json",
"compilerOptions": {
"baseUrl": ".",
"rootDir": "./src",
"types": [
"vuepress/client-types",
"vite/client",
"webpack-env"
],
"outDir": "./lib"
},
"include": ["./src"]
}

View File

@ -0,0 +1,68 @@
import { type Options, defineConfig } from 'tsup'
const sharedExternal: (string | RegExp)[] = [
/.*\/shared\/index\.js$/,
]
const clientExternal: (string | RegExp)[] = [
...sharedExternal,
/^@internal/,
/.*\.vue$/,
/.*\.css$/,
]
export default defineConfig(() => {
const DEFAULT_OPTIONS: Options = {
dts: true,
sourcemap: false,
splitting: false,
format: 'esm',
}
return [
// shared
{
...DEFAULT_OPTIONS,
entry: ['./src/shared/index.ts'],
outDir: './lib/shared',
},
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
external: sharedExternal,
target: 'node18',
},
// client/utils/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/utils/index.ts'],
outDir: './lib/client/utils',
external: clientExternal,
},
// client/composables/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/composables/index.ts'],
outDir: './lib/client/composables',
external: clientExternal,
},
// client/config.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/config.ts'],
outDir: './lib/client',
external: clientExternal,
},
// client/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/index.ts'],
outDir: './lib/client',
external: [
...clientExternal,
'./composables/index.js',
],
},
]
})

View File

@ -27,10 +27,10 @@
"lib"
],
"scripts": {
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png}\" lib",
"ts": "tsc -b tsconfig.build.json"
"tsup": "tsup --config tsup.config.ts"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"
@ -40,6 +40,7 @@
"@shikijs/twoslash": "^1.10.3",
"@types/hast": "^3.0.4",
"@vuepress/helper": "2.0.0-rc.38",
"@vueuse/core": "^10.11.0",
"floating-vue": "^5.2.2",
"mdast-util-from-markdown": "^2.0.1",
"mdast-util-gfm": "^3.0.0",

View File

@ -0,0 +1,29 @@
import { type Options, defineConfig } from 'tsup'
export default defineConfig(() => {
const DEFAULT_OPTIONS: Options = {
dts: true,
sourcemap: false,
splitting: false,
format: 'esm',
}
return [
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
target: 'node18',
},
// client/composables/
{
...DEFAULT_OPTIONS,
entry: [
'copy-code.ts',
'twoslash.ts',
].map(file => `./src/client/composables/${file}`),
outDir: './lib/client/composables',
external: [/.*\.css$/],
},
]
})

View File

@ -4,12 +4,6 @@
"composite": true
},
"references": [
{ "path": "./plugin-baidu-tongji/tsconfig.build.json" },
{ "path": "./plugin-iconify/tsconfig.build.json" },
{ "path": "./plugin-fonts/tsconfig.build.json" },
{ "path": "./plugin-shikiji/tsconfig.build.json" },
{ "path": "./plugin-content-update/tsconfig.build.json" },
{ "path": "./plugin-search/tsconfig.build.json" },
{ "path": "./plugin-md-power/tsconfig.build.json" }
],
"files": []

892
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -37,10 +37,6 @@
"types": "./lib/client/composables/index.d.ts",
"import": "./lib/client/composables/index.js"
},
"./composables/*": {
"types": "./lib/client/composables/*.d.ts",
"import": "./lib/client/composables/*.js"
},
"./shared": {
"types": "./lib/shared/index.d.ts",
"import": "./lib/shared/index.js"
@ -54,20 +50,19 @@
"templates"
],
"scripts": {
"dev": "pnpm '/(copy|ts):watch/'",
"build": "pnpm run copy && pnpm run ts",
"clean": "rimraf --glob ./lib ./*.tsbuildinfo",
"dev": "pnpm '/(copy|tsup):watch/'",
"build": "pnpm run copy && pnpm run tsup",
"clean": "rimraf --glob ./lib",
"copy": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png,woff2}\" lib",
"copy:watch": "cpx \"src/**/*.{d.ts,vue,css,scss,jpg,png,woff2}\" lib -w",
"ts": "tsc -b tsconfig.build.json",
"ts:watch": "tsc -b tsconfig.build.json --watch"
"tsup": "tsup --config tsup.config.ts",
"tsup:watch": "tsup --config tsup.config.ts --watch"
},
"peerDependencies": {
"vuepress": "2.0.0-rc.14"
},
"dependencies": {
"@pengzhanbo/utils": "^1.1.2",
"@vuepress-plume/plugin-baidu-tongji": "workspace:*",
"@vuepress-plume/plugin-content-update": "workspace:*",
"@vuepress-plume/plugin-fonts": "workspace:*",
"@vuepress-plume/plugin-iconify": "workspace:*",

View File

@ -1,11 +0,0 @@
{
"extends": "../plugins/tsconfig.build.json",
"compilerOptions": {
"baseUrl": ".",
"rootDir": "./src",
"types": ["vuepress/client-types", "vite/client", "webpack-env"],
"outDir": "./lib"
},
"files": [],
"include": ["./src"]
}

80
theme/tsup.config.ts Normal file
View File

@ -0,0 +1,80 @@
import { type Options, defineConfig } from 'tsup'
const sharedExternal: (string | RegExp)[] = [
/.*\/shared\/index\.js$/,
]
const clientExternal: (string | RegExp)[] = [
...sharedExternal,
/.*\.vue$/,
/^@internal/,
/^@theme/,
/.*\.css$/,
]
export default defineConfig((cli) => {
const DEFAULT_OPTIONS: Options = {
dts: !cli.watch,
sourcemap: false,
splitting: false,
format: 'esm',
silent: !!cli.watch,
}
return [
// shared
{
...DEFAULT_OPTIONS,
entry: ['./src/shared/index.ts'],
outDir: './lib/shared',
dts: true,
},
// node
{
...DEFAULT_OPTIONS,
entry: ['./src/node/index.ts'],
outDir: './lib/node',
external: sharedExternal,
target: 'node18',
},
// client/utils/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/utils/index.ts'],
outDir: './lib/client/utils',
external: clientExternal,
},
// client/composables/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/composables/index.ts'],
outDir: './lib/client/composables',
external: [
...clientExternal,
'../utils/index.js',
],
},
// client/config.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/config.ts'],
outDir: './lib/client',
external: [
...clientExternal,
'./composables/index.js',
'./utils/index.js',
],
},
// client/index.js
{
...DEFAULT_OPTIONS,
entry: ['./src/client/index.ts'],
outDir: './lib/client',
external: [
...clientExternal,
'./composables/index.js',
'./utils/index.js',
'./config.js',
],
},
]
})

View File

@ -1,8 +0,0 @@
{
"extends": "./tsconfig.base.json",
"references": [
{ "path": "./plugins/tsconfig.build.json" },
{ "path": "./theme/tsconfig.build.json" }
],
"files": []
}

View File

@ -4,19 +4,19 @@
"jsx": "preserve",
"baseUrl": ".",
"paths": {
"@internal/md-power/replEditorData": [
"./plugins/plugin-md-power/src/client/shim.d.ts"
],
"@internal/md-power/replEditorData": ["./plugins/plugin-md-power/src/client/shim.d.ts"],
"@internal/pageComponents": ["./docs/.vuepress/.temp/internal/pageComponents.js"],
"@internal/*": ["./docs/.vuepress/.temp/internal/*"],
"@theme/*": ["./theme/src/client/components/*"],
"@vuepress-plume/*": ["./plugins/*/src/node/index.ts"],
"vuepress-theme-plume": ["./theme/src/node/index.ts"],
"vuepress-theme-plume/client": ["./theme/src/client/index.ts"],
"vuepress-theme-plume/shared": ["./theme/src/shared/index.ts"],
"vuepress-theme-plume/composables": ["./theme/src/client/composables/index.ts"],
"@vuepress-plume/*/client": ["./plugins/*/src/client/index.ts"],
"vuepress-plugin-md-power": [
"./plugins/plugin-md-power/src/node/index.ts"
],
"@theme/*": ["./theme/src/client/components/*"]
"vuepress-plugin-md-power": ["./plugins/plugin-md-power/src/node/index.ts"]
},
"types": ["webpack-env", "vite/client", "vuepress/client-types"]
},
@ -26,5 +26,11 @@
"docs/.vuepress/**/*",
"scripts/**/*"
],
"exclude": ["**/node_modules/**", "**/.cache/**", "**/.temp/**", "**/lib/**", "**/dist/**"]
"exclude": [
"**/node_modules/**",
"**/.cache/**",
"**/.temp/**",
"**/lib/**",
"**/dist/**"
]
}