diff --git a/publish/build.sh b/publish/build.sh
index af43e7477ec10b529ee8d241d153990204b9ee87..74fdbdf89f92f1646a9a37835a2ce7bd720b4666 100644
--- a/publish/build.sh
+++ b/publish/build.sh
@@ -8,8 +8,6 @@ node build_check.js
 
 set +e
 
-npm install
-
 cd ../form 
 
 npm install
@@ -55,3 +53,15 @@ cd ../publish
 node build_step_3.js
 
 echo "build_step_3 完成~!"
+
+cd ../play
+
+/Applications/CocosCreator/Creator/2.4.4/CocosCreator.app/Contents/MacOS/CocosCreator --path "./" --build "platform=web-desktop;debug=false;buildPath=build_web_desktop" --force
+
+echo "生成 web-desktop 完成~!"
+
+cd ../publish 
+
+node build_step_4.js
+
+echo "build_step_4 完成~!"
\ No newline at end of file
diff --git a/publish/build_step_3.js b/publish/build_step_3.js
index b1b1bc4d2dde903191ef989aa6edff91224de2a1..8fc7de02724b70b63223c50f212d90eb6f115e24 100644
--- a/publish/build_step_3.js
+++ b/publish/build_step_3.js
@@ -6,51 +6,6 @@ async function main() {
   await removeDir('./publish/android');
   await copyDir('../play/build_android/jsb-link/remote', './publish/android');
   await removeDir('../play/build_android/jsb-link');
-
-  const bundleData = {
-    ios: await getBundleData('./publish/ios'),
-    android: await getBundleData('./publish/android'),
-  }
-
-  fs.writeFileSync('./publish/config.json', JSON.stringify(bundleData));
-
-  const tarStream = new compressing.zip.Stream();
-  tarStream.addEntry('./publish/play');
-  tarStream.addEntry('./publish/form');
-  tarStream.addEntry('./publish/ios');
-  tarStream.addEntry('./publish/android');
-  tarStream.addEntry('./publish/config.json');
-
-  const destStream = fs.createWriteStream(`publish/${getReleaseFileName()}.zip`);
-
-  tarStream.pipe(destStream);
-
-  console.log('打包完成!');
-}
-
-async function getBundleData(path) {
-  const bundleData = {
-    sceneName: '',
-    version: '',
-  }
-  const paths = fs.readdirSync(path);
-  bundleData.sceneName = paths[0];
-  const files = fs.readdirSync(path + '/' + bundleData.sceneName);
-  files.forEach(fileName => {
-    fileName.split('.').forEach((str, idx, arr) => {
-      if (str == 'config') {
-        bundleData.version = arr[idx + 1];
-      }
-    })
-  });
-  return bundleData;
-}
-
-function getReleaseFileName() {
-  let date = new Date();
-  let fileName = `Release_${date.getFullYear()}${fix2(date.getMonth() + 1)}${fix2(date.getDate())} `;
-  fileName += `${fix2(date.getHours())}-${fix2(date.getMinutes())}-${fix2(date.getSeconds())}`;
-  return fileName;
 }
 
 main();
\ No newline at end of file
diff --git a/publish/build_step_4.js b/publish/build_step_4.js
new file mode 100644
index 0000000000000000000000000000000000000000..8992f0a54837b4d7c7ab6dd7f2c448e9e0eed529
--- /dev/null
+++ b/publish/build_step_4.js
@@ -0,0 +1,63 @@
+const { removeDir, copyDir, fix2 } = require('./utils');
+const compressing = require('compressing');
+let fs = require('fs');
+
+async function main() {
+  await removeDir('./publish/web_desktop');
+  const projectName = await getBundleName('../play/build_web_desktop/web-desktop/assets');
+  await copyDir(`../play/build_web_desktop/web-desktop/assets/${projectName}`, './publish/web_desktop');
+  await removeDir('../play/build_web_desktop');
+
+  const bundleData = {
+    ios: await getBundleData('./publish/ios'),
+    android: await getBundleData('./publish/android'),
+  }
+
+  fs.writeFileSync('./publish/config.json', JSON.stringify(bundleData));
+
+  const tarStream = new compressing.zip.Stream();
+  tarStream.addEntry('./publish/play');
+  tarStream.addEntry('./publish/form');
+  tarStream.addEntry('./publish/ios');
+  tarStream.addEntry('./publish/android');
+  tarStream.addEntry('./publish/web_desktop');
+  tarStream.addEntry('./publish/config.json');
+
+  const destStream = fs.createWriteStream(`publish/${getReleaseFileName()}.zip`);
+
+  tarStream.pipe(destStream);
+
+  console.log('打包完成!');
+}
+
+async function getBundleName(path) {
+  const paths = fs.readdirSync(path);
+  return paths.find(path => path != 'internal' && path !='main');
+}
+
+async function getBundleData(path) {
+  const bundleData = {
+    sceneName: '',
+    version: '',
+  }
+  const paths = fs.readdirSync(path);
+  bundleData.sceneName = paths[0];
+  const files = fs.readdirSync(path + '/' + bundleData.sceneName);
+  files.forEach(fileName => {
+    fileName.split('.').forEach((str, idx, arr) => {
+      if (str == 'config') {
+        bundleData.version = arr[idx + 1];
+      }
+    })
+  });
+  return bundleData;
+}
+
+function getReleaseFileName() {
+  let date = new Date();
+  let fileName = `Release_${date.getFullYear()}${fix2(date.getMonth() + 1)}${fix2(date.getDate())} `;
+  fileName += `${fix2(date.getHours())}-${fix2(date.getMinutes())}-${fix2(date.getSeconds())}`;
+  return fileName;
+}
+
+main();
\ No newline at end of file
diff --git a/publish/index.html b/publish/index.html
index d4bf389faec104cc5286634abc03c84037876a0d..b0ca3a534085851fcf7119afc4cbeafaf635bed3 100644
--- a/publish/index.html
+++ b/publish/index.html
@@ -35,7 +35,7 @@
 
 <script src="src/settings.js" charset="utf-8"></script>
 <script src="main.js" charset="utf-8"></script>
-<script type="text/javascript" src="https://staging-teach.cdn.ireadabc.com/h5template/h5-static-lib/js/air.js"></script>
+<script type="text/javascript" src="//staging-teach.cdn.ireadabc.com/h5template/h5-static-lib/js/air.js"></script>
 
 
 <script type="text/javascript">
diff --git a/publish/package-lock.json b/publish/package-lock.json
index e830904f310afa074d35aed98cd67eb25953bdfa..05a1722797227f701681bde30e6b87ee9c3aa63d 100644
--- a/publish/package-lock.json
+++ b/publish/package-lock.json
@@ -5,9 +5,9 @@
   "requires": true,
   "dependencies": {
     "bl": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
-      "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+      "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
       "requires": {
         "readable-stream": "^2.3.5",
         "safe-buffer": "^5.1.1"