diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index e22f7decdb44f1690522ad75d5115d9f589af3d3..b2a814c7794f547ffab1450f3276f0ec7255a968 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -39,10 +39,7 @@
                 "cwd": "${workspaceFolder}/server"
             },
             "problemMatcher": [],
-            "group": {
-                "kind": "build",
-                "isDefault": true
-            }
+            "group": "build"
         },
         {
             "label": "Install",
@@ -73,6 +70,18 @@
                     "${command:extensionPath}"
                 ]
             }
+        },
+        {
+            "type": "typescript",
+            "tsconfig": "client/tsconfig.json",
+            "problemMatcher": [
+                "$tsc"
+            ],
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            },
+            "label": "tsc: 构建 - client/tsconfig.json"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/client/out/languageserver.js b/client/out/languageserver.js
index 97fb14297843bb525ef6806f90b19e663e2aa584..b42ba27963141dd2c02ab8b02a81d986c9886d6e 100644
--- a/client/out/languageserver.js
+++ b/client/out/languageserver.js
@@ -20,6 +20,7 @@ let defaultClient;
 let clients = new Map();
 function registerCustomCommands(context) {
     context.subscriptions.push(vscode_1.commands.registerCommand('lua.config', (changes) => {
+        let propMap = new Map();
         for (const data of changes) {
             let config = vscode_1.workspace.getConfiguration(undefined, vscode_1.Uri.parse(data.uri));
             if (data.action == 'add') {
@@ -33,9 +34,11 @@ function registerCustomCommands(context) {
                 continue;
             }
             if (data.action == 'prop') {
-                let value = config.get(data.key);
-                value[data.prop] = data.value;
-                config.update(data.key, value, data.global);
+                if (!propMap[data.key]) {
+                    propMap[data.key] = config.get(data.key);
+                }
+                propMap[data.key][data.prop] = data.value;
+                config.update(data.key, propMap[data.key], data.global);
                 continue;
             }
         }
diff --git a/client/src/languageserver.ts b/client/src/languageserver.ts
index a994354378279ba99d83374f6300608e1e1186db..3fbc67b67d841d812efb1b3ac3acf1ef25eb5d2c 100644
--- a/client/src/languageserver.ts
+++ b/client/src/languageserver.ts
@@ -32,6 +32,7 @@ type HintResult = {
 
 function registerCustomCommands(context: ExtensionContext) {
     context.subscriptions.push(Commands.registerCommand('lua.config', (changes) => {
+        let propMap: Map<string, Map<string, any>> = new Map();
         for (const data of changes) {
             let config = Workspace.getConfiguration(undefined, Uri.parse(data.uri));
             if (data.action == 'add') {
@@ -45,9 +46,11 @@ function registerCustomCommands(context: ExtensionContext) {
                 continue;
             }
             if (data.action == 'prop') {
-                let value: Map<string, any> = config.get(data.key);
-                value[data.prop] = data.value;
-                config.update(data.key, value, data.global);
+                if (!propMap[data.key]) {
+                    propMap[data.key] = config.get(data.key);
+                }
+                propMap[data.key][data.prop] = data.value;
+                config.update(data.key, propMap[data.key], data.global);
                 continue;
             }
         }