1
1
import { resolve } from "path"
2
2
import { defineConfig , loadEnv } from "vite"
3
- import minimist from "minimist"
4
3
import { viteStaticCopy } from "vite-plugin-static-copy"
5
4
import livereload from "rollup-plugin-livereload"
6
5
import { svelte } from "@sveltejs/vite-plugin-svelte"
@@ -9,13 +8,15 @@ import fg from 'fast-glob';
9
8
10
9
import vitePluginYamlI18n from './yaml-plugin' ;
11
10
12
- const args = minimist ( process . argv . slice ( 2 ) )
13
- const isWatch = args . watch || args . w || false
14
- const devDistDir = "./dev"
15
- const distDir = isWatch ? devDistDir : "./dist"
11
+ const env = process . env ;
12
+ const isSrcmap = env . VITE_SOURCEMAP === 'inline' ;
13
+ const isDev = env . NODE_ENV === 'development' ;
16
14
17
- console . log ( "isWatch=>" , isWatch )
18
- console . log ( "distDir=>" , distDir )
15
+ const outputDir = isDev ? "dev" : "dist" ;
16
+
17
+ console . log ( "isDev=>" , isDev ) ;
18
+ console . log ( "isSrcmap=>" , isSrcmap ) ;
19
+ console . log ( "outputDir=>" , outputDir ) ;
19
20
20
21
export default defineConfig ( {
21
22
resolve : {
@@ -29,95 +30,71 @@ export default defineConfig({
29
30
30
31
vitePluginYamlI18n ( {
31
32
inDir : 'src/i18n' ,
32
- outDir : isWatch ? 'dev /i18n' : 'dist/i18n' ,
33
+ outDir : ` ${ outputDir } /i18n`
33
34
} ) ,
34
35
35
36
viteStaticCopy ( {
36
37
targets : [
37
- {
38
- src : "./README*.md" ,
39
- dest : "./" ,
40
- } ,
41
- {
42
- src : "./icon.png" ,
43
- dest : "./" ,
44
- } ,
45
- {
46
- src : "./preview.png" ,
47
- dest : "./" ,
48
- } ,
49
- {
50
- src : "./plugin.json" ,
51
- dest : "./" ,
52
- } ,
38
+ { src : "./README*.md" , dest : "./" } ,
39
+ { src : "./plugin.json" , dest : "./" } ,
40
+ { src : "./preview.png" , dest : "./" } ,
41
+ { src : "./icon.png" , dest : "./" } ,
53
42
{
54
43
src : "./src/i18n/*.md" ,
55
44
dest : "./i18n/" ,
56
45
} ,
57
46
] ,
58
47
} ) ,
48
+
59
49
] ,
60
50
61
- // https://github.com/vitejs/vite/issues/1930
62
- // https://vitejs.dev/guide/env-and-mode.html#env-files
63
- // https://github.com/vitejs/vite/discussions/3058#discussioncomment-2115319
64
- // 在这里自定义变量
65
51
define : {
66
- "process.env.DEV_MODE" : `"${ isWatch } "` ,
52
+ "process.env.DEV_MODE" : JSON . stringify ( isDev ) ,
53
+ "process.env.NODE_ENV" : JSON . stringify ( env . NODE_ENV )
67
54
} ,
68
55
69
56
build : {
70
- // 输出路径
71
- outDir : distDir ,
57
+ outDir : outputDir ,
72
58
emptyOutDir : false ,
73
-
74
- // 构建后是否生成 source map 文件
75
- sourcemap : isWatch ? 'inline' : false ,
76
-
77
- // 设置为 false 可以禁用最小化混淆
78
- // 或是用来指定是应用哪种混淆器
79
- // boolean | 'terser' | 'esbuild'
80
- // 不压缩,用于调试
81
- minify : ! isWatch ,
59
+ minify : true ,
60
+ sourcemap : isSrcmap ? 'inline' : false ,
82
61
83
62
lib : {
84
- // Could also be a dictionary or array of multiple entry points
85
63
entry : resolve ( __dirname , "src/index.ts" ) ,
86
- // the proper extensions will be added
87
64
fileName : "index" ,
88
65
formats : [ "cjs" ] ,
89
66
} ,
90
67
rollupOptions : {
91
68
plugins : [
92
- ...(
93
- isWatch ? [
94
- livereload ( devDistDir ) ,
95
- {
96
- //监听静态资源文件
97
- name : 'watch-external' ,
98
- async buildStart ( ) {
99
- const files = await fg ( [
100
- 'src/i18n/*.yaml' ,
101
- './README*.md' ,
102
- './plugin.json'
103
- ] ) ;
104
- for ( let file of files ) {
105
- this . addWatchFile ( file ) ;
106
- }
69
+ ...( isDev ? [
70
+ livereload ( outputDir ) ,
71
+ {
72
+ name : 'watch-external' ,
73
+ async buildStart ( ) {
74
+ const files = await fg ( [
75
+ 'src/i18n/*.yaml' ,
76
+ './README*.md' ,
77
+ './plugin.json'
78
+ ] ) ;
79
+ for ( let file of files ) {
80
+ this . addWatchFile ( file ) ;
107
81
}
108
82
}
109
- ] : [
110
- zipPack ( {
111
- inDir : './dist' ,
112
- outDir : './' ,
113
- outFileName : 'package.zip'
114
- } )
115
- ]
116
- )
83
+ }
84
+ ] : [
85
+ // Clean up unnecessary files under dist dir
86
+ cleanupDistFiles ( {
87
+ patterns : [ 'i18n/*.yaml' , 'i18n/*.md' ] ,
88
+ distDir : outputDir
89
+ } ) ,
90
+ zipPack ( {
91
+ inDir : './dist' ,
92
+ outDir : './' ,
93
+ outFileName : 'package.zip'
94
+ } )
95
+ ] )
117
96
] ,
118
97
119
- // make sure to externalize deps that shouldn't be bundled
120
- // into your library
121
98
external : [ "siyuan" , "process" ] ,
122
99
123
100
output : {
@@ -131,4 +108,60 @@ export default defineConfig({
131
108
} ,
132
109
} ,
133
110
}
134
- } )
111
+ } ) ;
112
+
113
+
114
+ /**
115
+ * Clean up some dist files after compiled
116
+ * @author frostime
117
+ * @param options:
118
+ * @returns
119
+ */
120
+ function cleanupDistFiles ( options : { patterns : string [ ] , distDir : string } ) {
121
+ const {
122
+ patterns,
123
+ distDir
124
+ } = options ;
125
+
126
+ return {
127
+ name : 'rollup-plugin-cleanup' ,
128
+ enforce : 'post' ,
129
+ writeBundle : {
130
+ sequential : true ,
131
+ order : 'post' as 'post' ,
132
+ async handler ( ) {
133
+ const fg = await import ( 'fast-glob' ) ;
134
+ const fs = await import ( 'fs' ) ;
135
+ // const path = await import('path');
136
+
137
+ // 使用 glob 语法,确保能匹配到文件
138
+ const distPatterns = patterns . map ( pat => `${ distDir } /${ pat } ` ) ;
139
+ console . debug ( 'Cleanup searching patterns:' , distPatterns ) ;
140
+
141
+ const files = await fg . default ( distPatterns , {
142
+ dot : true ,
143
+ absolute : true ,
144
+ onlyFiles : false
145
+ } ) ;
146
+
147
+ // console.info('Files to be cleaned up:', files);
148
+
149
+ for ( const file of files ) {
150
+ try {
151
+ if ( fs . default . existsSync ( file ) ) {
152
+ const stat = fs . default . statSync ( file ) ;
153
+ if ( stat . isDirectory ( ) ) {
154
+ fs . default . rmSync ( file , { recursive : true } ) ;
155
+ } else {
156
+ fs . default . unlinkSync ( file ) ;
157
+ }
158
+ console . log ( `Cleaned up: ${ file } ` ) ;
159
+ }
160
+ } catch ( error ) {
161
+ console . error ( `Failed to clean up ${ file } :` , error ) ;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ } ;
167
+ }
0 commit comments