@@ -10,6 +10,7 @@ class ConfigParser {
10
10
rules : Rules = new Map < Identifier , Rule > ( ) ;
11
11
file : string = env . configPath ;
12
12
lastSave = Date . now ( ) ;
13
+ notSavingKeys : Identifier [ ] = [ ] ;
13
14
14
15
constructor ( ) { }
15
16
@@ -25,11 +26,15 @@ class ConfigParser {
25
26
return this . rules . has ( key ) ;
26
27
}
27
28
28
- setRule ( key : Identifier , rule : Rule ) {
29
+ setRule ( key : Identifier , rule : Rule , needSave : boolean = true ) {
29
30
if ( this . rules . has ( key ) ) {
30
31
throw `duplicate rule ${ key } ` ;
31
32
}
33
+ rule . needSave = needSave ;
32
34
this . rules . set ( key , rule ) ;
35
+ if ( ! needSave ) {
36
+ this . notSavingKeys . push ( key ) ;
37
+ }
33
38
}
34
39
35
40
getRule ( key : Identifier ) : Rule {
@@ -47,17 +52,20 @@ class ConfigParser {
47
52
}
48
53
const config = { [ key ] : value } ;
49
54
store . dispatch ( "updateConfig" , config ) ;
50
- const now = Date . now ( ) ;
51
- if ( this . lastSave > now ) {
52
- //就说明我们不需要唤起一次新的保存
53
- // console.log("schedule save pass");
54
- } else {
55
- const interval = 2000 ; //修改后预定一次保存,在此保存之前的所有修改都不会再预定保存
56
- this . lastSave = now + interval ;
57
- setTimeout ( ( ) => {
58
- // console.log("schedule save");
59
- this . save ( ) ;
60
- } , interval ) ;
55
+ if ( this . getRule ( key ) . needSave ) {
56
+ //需要保存的才及时保存
57
+ const now = Date . now ( ) ;
58
+ if ( this . lastSave > now ) {
59
+ //就说明我们不需要唤起一次新的保存
60
+ // console.log("schedule save pass");
61
+ } else {
62
+ const interval = 2000 ; //修改后预定一次保存,在此保存之前的所有修改都不会再预定保存
63
+ this . lastSave = now + interval ;
64
+ setTimeout ( ( ) => {
65
+ // console.log("schedule save");
66
+ this . save ( ) ;
67
+ } , interval ) ;
68
+ }
61
69
}
62
70
return true ;
63
71
}
@@ -127,7 +135,9 @@ class ConfigParser {
127
135
}
128
136
129
137
save ( ) {
130
- writeFileSync ( this . file , JSON . stringify ( store . state . config , null , 4 ) ) ;
138
+ let config2Save : { [ key : string ] : string } = store . state . config ;
139
+ this . notSavingKeys . map ( ( key ) => delete config2Save [ key ] ) ; //去掉不需要保存的
140
+ writeFileSync ( this . file , JSON . stringify ( config2Save , null , 4 ) ) ;
131
141
const now = Date . now ( ) ;
132
142
if ( now > this . lastSave ) {
133
143
this . lastSave = now ;
0 commit comments