diff --git a/.gitignore b/.gitignore
index 12d8bad12d021e9f3b8df77c336b5f73d9d52c48..0fc73317a8cc47df161200cbb077512a0ac56d6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,64 @@
+/node_modules
+# /dist
+/publish
 /publish/form
 /form/publish/*.zip
 /publish/play
-/publish/node_modules
-/publish/publish/play
-/publish/publish/form
-/publish/publish/*.zip
+/node_modules
+/build_android
+/build_ios
+/build_web_desktop
+
+#/////////////////////////////////////////////////////////////////////////////
+# Fireball Projects
+#/////////////////////////////////////////////////////////////////////////////
+
+/library/
+/temp/
+/local/
+/build/
+
+#/////////////////////////////////////////////////////////////////////////////
+# npm files
+#/////////////////////////////////////////////////////////////////////////////
+
+npm-debug.log
+node_modules/
+
+#/////////////////////////////////////////////////////////////////////////////
+# Logs and databases
+#/////////////////////////////////////////////////////////////////////////////
+
+*.log
+*.sql
+*.sqlite
+
+#/////////////////////////////////////////////////////////////////////////////
+# files for debugger
+#/////////////////////////////////////////////////////////////////////////////
+
+*.sln
+*.csproj
+*.pidb
+*.unityproj
+*.suo
+
+#/////////////////////////////////////////////////////////////////////////////
+# OS generated files
+#/////////////////////////////////////////////////////////////////////////////
+
+.DS_Store
+ehthumbs.db
+Thumbs.db
+
+#/////////////////////////////////////////////////////////////////////////////
+# WebStorm files
+#/////////////////////////////////////////////////////////////////////////////
+
+.idea/
+
+#//////////////////////////
+# VS Code files
+#//////////////////////////
+
+.vscode/
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..62fbd90ad0cd0c9c3a903eeea6c2ce5dc72c1377
--- /dev/null
+++ b/README.md
@@ -0,0 +1,84 @@
+# cocos-generator
+
+cocos creator技术框架下的H5互动模板框架脚手架,基于cocos creator实现快速开发基于绘玩云的H5互动课件。
+
+# 使用简介
+
+## 前期准备
+
+* git下载  https://git-scm.com/downloads 
+* nodejs下载  https://nodejs.org/zh-cn/download/
+* 谷歌浏览器下载  https://www.google.cn/chrome/
+
+都下载最新版就行,然后默认安装就可以
+
+
+## 生成项目
+
+* 登录绘玩云课件开发平台:http://staging-teach.ireadabc.com/ 
+* 点击“登录账号,查看我的课件”
+* 输入测试的用户名/密码:developers/12345678
+* 在右上角“个人中心”的下拉菜单里,点击“我的模板” 菜单,然后点击“新建模板”, 填写必要的信息,在“技术选型”一项上选择“Cocos”
+* 点击“确定”后,列表页就会出现一个新生成的模板项目
+* 在项目的卡片下找到“开发”按钮,则会弹出相对应的git地址
+
+## 获取并启动项目
+
+```
+// xxx 是上面项目对应的Git地址
+git clone xxx
+cd 项目名称/
+npm install
+
+```
+* 打开Cocos Creator, 点击项目(Project)=> 添加(Add) 在打开的对话框里面选择进入clone下来的项目,选择本项目,然后打开
+* 基于项目里“this.data”进行常规的Cocos开发 (其中this.data是云平台的配置数据)
+* 注意 Cocos Creator 版本必须是2.4.5
+
+
+## 本地调试
+
+在基于CocosCreator的开发与预览调试都完成之后,需要进行模板放到云平台上的数据配置等方面的调试,还要进行cocos打包到IOS/Android真机上的调试,为了更方便与高效的调试,我们提供了如下工具进行调试与测试
+
+### 普通模板
+
+* 启动本地服务
+
+```
+npm start
+```
+
+* 打开浏览器:http://staging-teach.ireadabc.com/template_ci/debug 
+* 点击右上角齿轮,选择技术选型、调试模式选择“普通”
+
+### 互动模板
+
+* 找到项目根路径下 index.html 文件
+* 在引入JS的位置将air.js改为air_online_open.js
+* 启动本地服务
+
+```
+npm start
+```
+
+* 打开浏览器:http://staging-teach.ireadabc.com/template_ci/debug 
+* 点击右上角齿轮,选择技术选型、调试模式选择“互动”
+* 左侧老师、右侧学生
+
+### 真机调试
+
+* 下载模板调试专用app 
+
+http://download-iplayabc.oss-cn-beijing.aliyuncs.com/iDebugABC.apk
+
+![avatar](http://staging-teach.cdn.ireadabc.com/084f2f95-8213-4c5a-8c46-b194819d7677.png)
+
+* 启动本地服务
+
+```
+npm start
+```
+
+* 手机和电脑连接同一个Wifi
+* 打开调试app,根据提示输入IP地址,点击开始就可以在手机上预览模板了
+* 使用 this.log("==调试信息=="); 可以打印日志进行必要的调试
\ No newline at end of file
diff --git a/play/assets/tmpGame.meta b/assets/tmpGame.meta
similarity index 100%
rename from play/assets/tmpGame.meta
rename to assets/tmpGame.meta
diff --git a/play/assets/tmpGame/animations.meta b/assets/tmpGame/animations.meta
similarity index 100%
rename from play/assets/tmpGame/animations.meta
rename to assets/tmpGame/animations.meta
diff --git a/play/assets/tmpGame/animations/animDark.anim b/assets/tmpGame/animations/animDark.anim
similarity index 100%
rename from play/assets/tmpGame/animations/animDark.anim
rename to assets/tmpGame/animations/animDark.anim
diff --git a/play/assets/tmpGame/animations/animDark.anim.meta b/assets/tmpGame/animations/animDark.anim.meta
similarity index 100%
rename from play/assets/tmpGame/animations/animDark.anim.meta
rename to assets/tmpGame/animations/animDark.anim.meta
diff --git a/play/assets/tmpGame/animations/animLight.anim b/assets/tmpGame/animations/animLight.anim
similarity index 100%
rename from play/assets/tmpGame/animations/animLight.anim
rename to assets/tmpGame/animations/animLight.anim
diff --git a/play/assets/tmpGame/animations/animLight.anim.meta b/assets/tmpGame/animations/animLight.anim.meta
similarity index 100%
rename from play/assets/tmpGame/animations/animLight.anim.meta
rename to assets/tmpGame/animations/animLight.anim.meta
diff --git a/play/assets/tmpGame/audios.meta b/assets/tmpGame/audios.meta
similarity index 100%
rename from play/assets/tmpGame/audios.meta
rename to assets/tmpGame/audios.meta
diff --git a/play/assets/tmpGame/audios/.keep b/assets/tmpGame/audios/.keep
similarity index 100%
rename from play/assets/tmpGame/audios/.keep
rename to assets/tmpGame/audios/.keep
diff --git "a/play/assets/tmpGame/audios/\345\207\272\347\216\260.mp3" "b/assets/tmpGame/audios/\345\207\272\347\216\260.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\345\207\272\347\216\260.mp3"
rename to "assets/tmpGame/audios/\345\207\272\347\216\260.mp3"
diff --git "a/play/assets/tmpGame/audios/\345\207\272\347\216\260.mp3.meta" "b/assets/tmpGame/audios/\345\207\272\347\216\260.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\345\207\272\347\216\260.mp3.meta"
rename to "assets/tmpGame/audios/\345\207\272\347\216\260.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3" "b/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3"
rename to "assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3"
diff --git "a/play/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3.meta" "b/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3.meta"
rename to "assets/tmpGame/audios/\345\244\247\345\272\225\345\272\247.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\346\214\211\351\222\256.mp3" "b/assets/tmpGame/audios/\346\214\211\351\222\256.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\214\211\351\222\256.mp3"
rename to "assets/tmpGame/audios/\346\214\211\351\222\256.mp3"
diff --git "a/play/assets/tmpGame/audios/\346\214\211\351\222\256.mp3.meta" "b/assets/tmpGame/audios/\346\214\211\351\222\256.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\214\211\351\222\256.mp3.meta"
rename to "assets/tmpGame/audios/\346\214\211\351\222\256.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\346\222\222\350\212\261.mp3" "b/assets/tmpGame/audios/\346\222\222\350\212\261.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\222\222\350\212\261.mp3"
rename to "assets/tmpGame/audios/\346\222\222\350\212\261.mp3"
diff --git "a/play/assets/tmpGame/audios/\346\222\222\350\212\261.mp3.meta" "b/assets/tmpGame/audios/\346\222\222\350\212\261.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\222\222\350\212\261.mp3.meta"
rename to "assets/tmpGame/audios/\346\222\222\350\212\261.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\346\255\243\347\241\256.mp3" "b/assets/tmpGame/audios/\346\255\243\347\241\256.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\255\243\347\241\256.mp3"
rename to "assets/tmpGame/audios/\346\255\243\347\241\256.mp3"
diff --git "a/play/assets/tmpGame/audios/\346\255\243\347\241\256.mp3.meta" "b/assets/tmpGame/audios/\346\255\243\347\241\256.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\346\255\243\347\241\256.mp3.meta"
rename to "assets/tmpGame/audios/\346\255\243\347\241\256.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\347\247\273\345\212\250.mp3" "b/assets/tmpGame/audios/\347\247\273\345\212\250.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\347\247\273\345\212\250.mp3"
rename to "assets/tmpGame/audios/\347\247\273\345\212\250.mp3"
diff --git "a/play/assets/tmpGame/audios/\347\247\273\345\212\250.mp3.meta" "b/assets/tmpGame/audios/\347\247\273\345\212\250.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\347\247\273\345\212\250.mp3.meta"
rename to "assets/tmpGame/audios/\347\247\273\345\212\250.mp3.meta"
diff --git "a/play/assets/tmpGame/audios/\351\224\231\350\257\257.mp3" "b/assets/tmpGame/audios/\351\224\231\350\257\257.mp3"
similarity index 100%
rename from "play/assets/tmpGame/audios/\351\224\231\350\257\257.mp3"
rename to "assets/tmpGame/audios/\351\224\231\350\257\257.mp3"
diff --git "a/play/assets/tmpGame/audios/\351\224\231\350\257\257.mp3.meta" "b/assets/tmpGame/audios/\351\224\231\350\257\257.mp3.meta"
similarity index 100%
rename from "play/assets/tmpGame/audios/\351\224\231\350\257\257.mp3.meta"
rename to "assets/tmpGame/audios/\351\224\231\350\257\257.mp3.meta"
diff --git a/play/assets/tmpGame/dragonBones.meta b/assets/tmpGame/dragonBones.meta
similarity index 100%
rename from play/assets/tmpGame/dragonBones.meta
rename to assets/tmpGame/dragonBones.meta
diff --git a/play/assets/tmpGame/dragonBones/.keep b/assets/tmpGame/dragonBones/.keep
similarity index 100%
rename from play/assets/tmpGame/dragonBones/.keep
rename to assets/tmpGame/dragonBones/.keep
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_ske.json b/assets/tmpGame/dragonBones/NewProject_2_ske.json
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_ske.json
rename to assets/tmpGame/dragonBones/NewProject_2_ske.json
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_ske.json.meta b/assets/tmpGame/dragonBones/NewProject_2_ske.json.meta
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_ske.json.meta
rename to assets/tmpGame/dragonBones/NewProject_2_ske.json.meta
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_tex.json b/assets/tmpGame/dragonBones/NewProject_2_tex.json
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_tex.json
rename to assets/tmpGame/dragonBones/NewProject_2_tex.json
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_tex.json.meta b/assets/tmpGame/dragonBones/NewProject_2_tex.json.meta
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_tex.json.meta
rename to assets/tmpGame/dragonBones/NewProject_2_tex.json.meta
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_tex.png b/assets/tmpGame/dragonBones/NewProject_2_tex.png
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_tex.png
rename to assets/tmpGame/dragonBones/NewProject_2_tex.png
diff --git a/play/assets/tmpGame/dragonBones/NewProject_2_tex.png.meta b/assets/tmpGame/dragonBones/NewProject_2_tex.png.meta
similarity index 100%
rename from play/assets/tmpGame/dragonBones/NewProject_2_tex.png.meta
rename to assets/tmpGame/dragonBones/NewProject_2_tex.png.meta
diff --git a/play/assets/tmpGame/fonts.meta b/assets/tmpGame/fonts.meta
similarity index 100%
rename from play/assets/tmpGame/fonts.meta
rename to assets/tmpGame/fonts.meta
diff --git a/play/assets/tmpGame/fonts/.keep b/assets/tmpGame/fonts/.keep
similarity index 100%
rename from play/assets/tmpGame/fonts/.keep
rename to assets/tmpGame/fonts/.keep
diff --git a/play/assets/tmpGame/fonts/Berlin Sans FB.ttf b/assets/tmpGame/fonts/Berlin Sans FB.ttf
similarity index 100%
rename from play/assets/tmpGame/fonts/Berlin Sans FB.ttf
rename to assets/tmpGame/fonts/Berlin Sans FB.ttf
diff --git a/play/assets/tmpGame/fonts/Berlin Sans FB.ttf.meta b/assets/tmpGame/fonts/Berlin Sans FB.ttf.meta
similarity index 100%
rename from play/assets/tmpGame/fonts/Berlin Sans FB.ttf.meta
rename to assets/tmpGame/fonts/Berlin Sans FB.ttf.meta
diff --git a/play/assets/tmpGame/fonts/Comic Sans MS.TTF b/assets/tmpGame/fonts/Comic Sans MS.TTF
similarity index 100%
rename from play/assets/tmpGame/fonts/Comic Sans MS.TTF
rename to assets/tmpGame/fonts/Comic Sans MS.TTF
diff --git a/play/assets/tmpGame/fonts/Comic Sans MS.TTF.meta b/assets/tmpGame/fonts/Comic Sans MS.TTF.meta
similarity index 100%
rename from play/assets/tmpGame/fonts/Comic Sans MS.TTF.meta
rename to assets/tmpGame/fonts/Comic Sans MS.TTF.meta
diff --git a/play/assets/tmpGame/prefabs.meta b/assets/tmpGame/prefabs.meta
similarity index 100%
rename from play/assets/tmpGame/prefabs.meta
rename to assets/tmpGame/prefabs.meta
diff --git a/play/assets/tmpGame/prefabs/ItemAnswer.prefab b/assets/tmpGame/prefabs/ItemAnswer.prefab
similarity index 100%
rename from play/assets/tmpGame/prefabs/ItemAnswer.prefab
rename to assets/tmpGame/prefabs/ItemAnswer.prefab
diff --git a/play/assets/tmpGame/prefabs/ItemAnswer.prefab.meta b/assets/tmpGame/prefabs/ItemAnswer.prefab.meta
similarity index 100%
rename from play/assets/tmpGame/prefabs/ItemAnswer.prefab.meta
rename to assets/tmpGame/prefabs/ItemAnswer.prefab.meta
diff --git a/play/assets/tmpGame/prefabs/ItemQuestion.prefab b/assets/tmpGame/prefabs/ItemQuestion.prefab
similarity index 100%
rename from play/assets/tmpGame/prefabs/ItemQuestion.prefab
rename to assets/tmpGame/prefabs/ItemQuestion.prefab
diff --git a/play/assets/tmpGame/prefabs/ItemQuestion.prefab.meta b/assets/tmpGame/prefabs/ItemQuestion.prefab.meta
similarity index 100%
rename from play/assets/tmpGame/prefabs/ItemQuestion.prefab.meta
rename to assets/tmpGame/prefabs/ItemQuestion.prefab.meta
diff --git a/play/assets/tmpGame/prefabs/LayerOver.prefab b/assets/tmpGame/prefabs/LayerOver.prefab
similarity index 100%
rename from play/assets/tmpGame/prefabs/LayerOver.prefab
rename to assets/tmpGame/prefabs/LayerOver.prefab
diff --git a/play/assets/tmpGame/prefabs/LayerOver.prefab.meta b/assets/tmpGame/prefabs/LayerOver.prefab.meta
similarity index 100%
rename from play/assets/tmpGame/prefabs/LayerOver.prefab.meta
rename to assets/tmpGame/prefabs/LayerOver.prefab.meta
diff --git a/play/assets/tmpGame/scene.meta b/assets/tmpGame/scene.meta
similarity index 100%
rename from play/assets/tmpGame/scene.meta
rename to assets/tmpGame/scene.meta
diff --git a/play/assets/tmpGame/scene/Scene.fire b/assets/tmpGame/scene/Scene.fire
similarity index 100%
rename from play/assets/tmpGame/scene/Scene.fire
rename to assets/tmpGame/scene/Scene.fire
diff --git a/play/assets/tmpGame/scene/Scene.fire.meta b/assets/tmpGame/scene/Scene.fire.meta
similarity index 100%
rename from play/assets/tmpGame/scene/Scene.fire.meta
rename to assets/tmpGame/scene/Scene.fire.meta
diff --git a/play/assets/tmpGame/script.meta b/assets/tmpGame/script.meta
similarity index 100%
rename from play/assets/tmpGame/script.meta
rename to assets/tmpGame/script.meta
diff --git a/play/assets/tmpGame/script/BaseUI.js b/assets/tmpGame/script/BaseUI.js
similarity index 100%
rename from play/assets/tmpGame/script/BaseUI.js
rename to assets/tmpGame/script/BaseUI.js
diff --git a/play/assets/tmpGame/script/BaseUI.js.meta b/assets/tmpGame/script/BaseUI.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/BaseUI.js.meta
rename to assets/tmpGame/script/BaseUI.js.meta
diff --git a/play/assets/tmpGame/script/ItemAnswer.js b/assets/tmpGame/script/ItemAnswer.js
similarity index 100%
rename from play/assets/tmpGame/script/ItemAnswer.js
rename to assets/tmpGame/script/ItemAnswer.js
diff --git a/play/assets/tmpGame/script/ItemAnswer.js.meta b/assets/tmpGame/script/ItemAnswer.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/ItemAnswer.js.meta
rename to assets/tmpGame/script/ItemAnswer.js.meta
diff --git a/play/assets/tmpGame/script/ItemQuestion.js b/assets/tmpGame/script/ItemQuestion.js
similarity index 100%
rename from play/assets/tmpGame/script/ItemQuestion.js
rename to assets/tmpGame/script/ItemQuestion.js
diff --git a/play/assets/tmpGame/script/ItemQuestion.js.meta b/assets/tmpGame/script/ItemQuestion.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/ItemQuestion.js.meta
rename to assets/tmpGame/script/ItemQuestion.js.meta
diff --git a/play/assets/tmpGame/script/LayerOver.js b/assets/tmpGame/script/LayerOver.js
similarity index 100%
rename from play/assets/tmpGame/script/LayerOver.js
rename to assets/tmpGame/script/LayerOver.js
diff --git a/play/assets/tmpGame/script/LayerOver.js.meta b/assets/tmpGame/script/LayerOver.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/LayerOver.js.meta
rename to assets/tmpGame/script/LayerOver.js.meta
diff --git a/play/assets/tmpGame/script/NodeFitScreen.js b/assets/tmpGame/script/NodeFitScreen.js
similarity index 100%
rename from play/assets/tmpGame/script/NodeFitScreen.js
rename to assets/tmpGame/script/NodeFitScreen.js
diff --git a/play/assets/tmpGame/script/NodeFitScreen.js.meta b/assets/tmpGame/script/NodeFitScreen.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/NodeFitScreen.js.meta
rename to assets/tmpGame/script/NodeFitScreen.js.meta
diff --git a/play/assets/tmpGame/script/Scene.js b/assets/tmpGame/script/Scene.js
similarity index 100%
rename from play/assets/tmpGame/script/Scene.js
rename to assets/tmpGame/script/Scene.js
diff --git a/play/assets/tmpGame/script/Scene.js.meta b/assets/tmpGame/script/Scene.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/Scene.js.meta
rename to assets/tmpGame/script/Scene.js.meta
diff --git a/play/assets/tmpGame/script/runtime.js b/assets/tmpGame/script/runtime.js
similarity index 100%
rename from play/assets/tmpGame/script/runtime.js
rename to assets/tmpGame/script/runtime.js
diff --git a/play/assets/tmpGame/script/runtime.js.meta b/assets/tmpGame/script/runtime.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/runtime.js.meta
rename to assets/tmpGame/script/runtime.js.meta
diff --git a/play/assets/tmpGame/script/util.js b/assets/tmpGame/script/util.js
similarity index 100%
rename from play/assets/tmpGame/script/util.js
rename to assets/tmpGame/script/util.js
diff --git a/play/assets/tmpGame/script/util.js.meta b/assets/tmpGame/script/util.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/util.js.meta
rename to assets/tmpGame/script/util.js.meta
diff --git a/play/assets/tmpGame/script/utils.js b/assets/tmpGame/script/utils.js
similarity index 100%
rename from play/assets/tmpGame/script/utils.js
rename to assets/tmpGame/script/utils.js
diff --git a/play/assets/tmpGame/script/utils.js.meta b/assets/tmpGame/script/utils.js.meta
similarity index 100%
rename from play/assets/tmpGame/script/utils.js.meta
rename to assets/tmpGame/script/utils.js.meta
diff --git a/play/assets/tmpGame/textures.meta b/assets/tmpGame/textures.meta
similarity index 100%
rename from play/assets/tmpGame/textures.meta
rename to assets/tmpGame/textures.meta
diff --git a/play/assets/tmpGame/textures/.keep b/assets/tmpGame/textures/.keep
similarity index 100%
rename from play/assets/tmpGame/textures/.keep
rename to assets/tmpGame/textures/.keep
diff --git a/play/assets/tmpGame/textures/pack.meta b/assets/tmpGame/textures/pack.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack.meta
rename to assets/tmpGame/textures/pack.meta
diff --git a/play/assets/tmpGame/textures/pack/AutoAtlas.pac b/assets/tmpGame/textures/pack/AutoAtlas.pac
similarity index 100%
rename from play/assets/tmpGame/textures/pack/AutoAtlas.pac
rename to assets/tmpGame/textures/pack/AutoAtlas.pac
diff --git a/play/assets/tmpGame/textures/pack/AutoAtlas.pac.meta b/assets/tmpGame/textures/pack/AutoAtlas.pac.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/AutoAtlas.pac.meta
rename to assets/tmpGame/textures/pack/AutoAtlas.pac.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_dadizuo.png b/assets/tmpGame/textures/pack/bg_dadizuo.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_dadizuo.png
rename to assets/tmpGame/textures/pack/bg_dadizuo.png
diff --git a/play/assets/tmpGame/textures/pack/bg_dadizuo.png.meta b/assets/tmpGame/textures/pack/bg_dadizuo.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_dadizuo.png.meta
rename to assets/tmpGame/textures/pack/bg_dadizuo.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_light.png b/assets/tmpGame/textures/pack/bg_light.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_light.png
rename to assets/tmpGame/textures/pack/bg_light.png
diff --git a/play/assets/tmpGame/textures/pack/bg_light.png.meta b/assets/tmpGame/textures/pack/bg_light.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_light.png.meta
rename to assets/tmpGame/textures/pack/bg_light.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_moondark.png b/assets/tmpGame/textures/pack/bg_moondark.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_moondark.png
rename to assets/tmpGame/textures/pack/bg_moondark.png
diff --git a/play/assets/tmpGame/textures/pack/bg_moondark.png.meta b/assets/tmpGame/textures/pack/bg_moondark.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_moondark.png.meta
rename to assets/tmpGame/textures/pack/bg_moondark.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_moonlight.png b/assets/tmpGame/textures/pack/bg_moonlight.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_moonlight.png
rename to assets/tmpGame/textures/pack/bg_moonlight.png
diff --git a/play/assets/tmpGame/textures/pack/bg_moonlight.png.meta b/assets/tmpGame/textures/pack/bg_moonlight.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_moonlight.png.meta
rename to assets/tmpGame/textures/pack/bg_moonlight.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_qipao1.png b/assets/tmpGame/textures/pack/bg_qipao1.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_qipao1.png
rename to assets/tmpGame/textures/pack/bg_qipao1.png
diff --git a/play/assets/tmpGame/textures/pack/bg_qipao1.png.meta b/assets/tmpGame/textures/pack/bg_qipao1.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_qipao1.png.meta
rename to assets/tmpGame/textures/pack/bg_qipao1.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_qipao2.png b/assets/tmpGame/textures/pack/bg_qipao2.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_qipao2.png
rename to assets/tmpGame/textures/pack/bg_qipao2.png
diff --git a/play/assets/tmpGame/textures/pack/bg_qipao2.png.meta b/assets/tmpGame/textures/pack/bg_qipao2.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_qipao2.png.meta
rename to assets/tmpGame/textures/pack/bg_qipao2.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_sahua.png b/assets/tmpGame/textures/pack/bg_sahua.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_sahua.png
rename to assets/tmpGame/textures/pack/bg_sahua.png
diff --git a/play/assets/tmpGame/textures/pack/bg_sahua.png.meta b/assets/tmpGame/textures/pack/bg_sahua.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_sahua.png.meta
rename to assets/tmpGame/textures/pack/bg_sahua.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_stardark.png b/assets/tmpGame/textures/pack/bg_stardark.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_stardark.png
rename to assets/tmpGame/textures/pack/bg_stardark.png
diff --git a/play/assets/tmpGame/textures/pack/bg_stardark.png.meta b/assets/tmpGame/textures/pack/bg_stardark.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_stardark.png.meta
rename to assets/tmpGame/textures/pack/bg_stardark.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_starlight.png b/assets/tmpGame/textures/pack/bg_starlight.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_starlight.png
rename to assets/tmpGame/textures/pack/bg_starlight.png
diff --git a/play/assets/tmpGame/textures/pack/bg_starlight.png.meta b/assets/tmpGame/textures/pack/bg_starlight.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_starlight.png.meta
rename to assets/tmpGame/textures/pack/bg_starlight.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_ti1.png b/assets/tmpGame/textures/pack/bg_ti1.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_ti1.png
rename to assets/tmpGame/textures/pack/bg_ti1.png
diff --git a/play/assets/tmpGame/textures/pack/bg_ti1.png.meta b/assets/tmpGame/textures/pack/bg_ti1.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_ti1.png.meta
rename to assets/tmpGame/textures/pack/bg_ti1.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_title.png b/assets/tmpGame/textures/pack/bg_title.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_title.png
rename to assets/tmpGame/textures/pack/bg_title.png
diff --git a/play/assets/tmpGame/textures/pack/bg_title.png.meta b/assets/tmpGame/textures/pack/bg_title.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_title.png.meta
rename to assets/tmpGame/textures/pack/bg_title.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_verygood.png b/assets/tmpGame/textures/pack/bg_verygood.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_verygood.png
rename to assets/tmpGame/textures/pack/bg_verygood.png
diff --git a/play/assets/tmpGame/textures/pack/bg_verygood.png.meta b/assets/tmpGame/textures/pack/bg_verygood.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_verygood.png.meta
rename to assets/tmpGame/textures/pack/bg_verygood.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_xuanblue.png b/assets/tmpGame/textures/pack/bg_xuanblue.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_xuanblue.png
rename to assets/tmpGame/textures/pack/bg_xuanblue.png
diff --git a/play/assets/tmpGame/textures/pack/bg_xuanblue.png.meta b/assets/tmpGame/textures/pack/bg_xuanblue.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_xuanblue.png.meta
rename to assets/tmpGame/textures/pack/bg_xuanblue.png.meta
diff --git a/play/assets/tmpGame/textures/pack/bg_xuangreen.png b/assets/tmpGame/textures/pack/bg_xuangreen.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_xuangreen.png
rename to assets/tmpGame/textures/pack/bg_xuangreen.png
diff --git a/play/assets/tmpGame/textures/pack/bg_xuangreen.png.meta b/assets/tmpGame/textures/pack/bg_xuangreen.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/bg_xuangreen.png.meta
rename to assets/tmpGame/textures/pack/bg_xuangreen.png.meta
diff --git a/play/assets/tmpGame/textures/pack/btn_laba.png b/assets/tmpGame/textures/pack/btn_laba.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/btn_laba.png
rename to assets/tmpGame/textures/pack/btn_laba.png
diff --git a/play/assets/tmpGame/textures/pack/btn_laba.png.meta b/assets/tmpGame/textures/pack/btn_laba.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/btn_laba.png.meta
rename to assets/tmpGame/textures/pack/btn_laba.png.meta
diff --git a/play/assets/tmpGame/textures/pack/btn_laba2.png b/assets/tmpGame/textures/pack/btn_laba2.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/btn_laba2.png
rename to assets/tmpGame/textures/pack/btn_laba2.png
diff --git a/play/assets/tmpGame/textures/pack/btn_laba2.png.meta b/assets/tmpGame/textures/pack/btn_laba2.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/btn_laba2.png.meta
rename to assets/tmpGame/textures/pack/btn_laba2.png.meta
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_10.png b/assets/tmpGame/textures/pack/invalid-name_10.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_10.png
rename to assets/tmpGame/textures/pack/invalid-name_10.png
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_10.png.meta b/assets/tmpGame/textures/pack/invalid-name_10.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_10.png.meta
rename to assets/tmpGame/textures/pack/invalid-name_10.png.meta
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_8.png b/assets/tmpGame/textures/pack/invalid-name_8.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_8.png
rename to assets/tmpGame/textures/pack/invalid-name_8.png
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_8.png.meta b/assets/tmpGame/textures/pack/invalid-name_8.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_8.png.meta
rename to assets/tmpGame/textures/pack/invalid-name_8.png.meta
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_9.png b/assets/tmpGame/textures/pack/invalid-name_9.png
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_9.png
rename to assets/tmpGame/textures/pack/invalid-name_9.png
diff --git a/play/assets/tmpGame/textures/pack/invalid-name_9.png.meta b/assets/tmpGame/textures/pack/invalid-name_9.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/pack/invalid-name_9.png.meta
rename to assets/tmpGame/textures/pack/invalid-name_9.png.meta
diff --git a/play/assets/tmpGame/textures/unpack.meta b/assets/tmpGame/textures/unpack.meta
similarity index 100%
rename from play/assets/tmpGame/textures/unpack.meta
rename to assets/tmpGame/textures/unpack.meta
diff --git a/play/assets/tmpGame/textures/unpack/bg_bg.png b/assets/tmpGame/textures/unpack/bg_bg.png
similarity index 100%
rename from play/assets/tmpGame/textures/unpack/bg_bg.png
rename to assets/tmpGame/textures/unpack/bg_bg.png
diff --git a/play/assets/tmpGame/textures/unpack/bg_bg.png.meta b/assets/tmpGame/textures/unpack/bg_bg.png.meta
similarity index 100%
rename from play/assets/tmpGame/textures/unpack/bg_bg.png.meta
rename to assets/tmpGame/textures/unpack/bg_bg.png.meta
diff --git a/bin/app.js b/bin/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..74952692f2173838cd5726c657d1b15cfb77e375
--- /dev/null
+++ b/bin/app.js
@@ -0,0 +1,55 @@
+const express = require('express');
+const os = require('os');
+const readline = require('readline');
+const { build, buildAndroid, buildIos } = require('./buildCocos');
+
+const networkInfo = os.networkInterfaces();
+
+let host = '';
+for (const infos of Object.values(networkInfo)) {
+  for (const info of infos) {
+    if (info.family == 'IPv4') {
+      if (info.address.split('.')[0] != "127") {
+        host = info.address;
+      }
+    }
+  }
+}
+
+var app = express();
+
+app.use('/dist', express.static('dist'));
+app.use('/form', express.static('form'));
+
+app.get('/', function (req, res) {
+  res.send('Hello World');
+})
+
+let port = '';
+var server = app.listen(8081, function () {
+
+  port = server.address().port
+
+  console.log("测试服务已启动:%s:%s", host, port)
+  console.log("如果已经build可访问如下地址");
+  console.log("http://%s:%s/dist/play/index.html", host, port)
+  console.log("http://%s:%s/dist/play/index.html", "localhost", port)
+  console.log('-----------------');
+  console.log("    输入 build 构建安卓脚本");
+  console.log("    输入 build ios 构建IOS脚本");
+  console.log('-----------------');
+
+})
+
+const rl = readline.createInterface({
+  input: process.stdin,
+  output: process.stdout
+})
+rl.on('line', async (str) => {
+  if (str.trim() == 'build') {
+    await buildAndroid();
+  } else if (str.trim() == 'build ios') {
+    await buildIos();
+  }
+  console.log("服务器:%s:%s", host, port)
+})
diff --git a/bin/build.js b/bin/build.js
new file mode 100644
index 0000000000000000000000000000000000000000..4884ad94adbbe4dec5b363ea8f7607ddaa94bc5b
--- /dev/null
+++ b/bin/build.js
@@ -0,0 +1,2 @@
+const {build} = require('./buildCocos');
+build();
\ No newline at end of file
diff --git a/bin/buildCocos.js b/bin/buildCocos.js
new file mode 100644
index 0000000000000000000000000000000000000000..def408487f423cdd73d4cadf48bf895c2e97cce4
--- /dev/null
+++ b/bin/buildCocos.js
@@ -0,0 +1,415 @@
+const { spawn }  = require("child_process");
+const fs  = require("fs");
+const compressing  = require('compressing');
+const { v4, parse }  = require('uuid');
+const { Base64 }  = require('js-base64');
+const { copyDir, removeDir, fix2 }  = require("./utils");
+
+async function buildForm() {
+  const paths = fs.readdirSync('form');
+
+  if (!paths.includes('tsconfig.json')) {
+    await copyDir('form', 'dist/form');
+    return;
+  }
+
+  if (process.platform == 'win32') {
+    await execCmd('npm.cmd', ['install'], 'form');
+  } else {
+    await execCmd('npm', ['install'], 'form');
+  }
+
+  if (process.platform == 'win32') {
+    await execCmd('npm.cmd', ['run', 'publish'], 'form');
+  } else {
+    await execCmd('npm', ['run', 'publish'], 'form');
+  }
+
+  await compressing.zip.uncompress('form/publish/form.zip', 'dist/form');
+}
+
+function execCmd(cmd, params, path) {
+  return new Promise((resolve, reject) => {
+    const buffer = spawn(
+      cmd,
+      params,
+      { cwd: path }
+    );
+
+    buffer.stdout.on('data', (data) => {
+      console.log(`stdout: ${data}`);
+    });
+
+    buffer.stderr.on('data', (data) => {
+      console.error(`stderr: ${data}`);
+    });
+
+    buffer.on('close', (code) => {
+      console.log(`child process exited with code ${code}`);
+      resolve();
+    });
+  });
+}
+
+
+let creatorBasePath = 'C:\\CocosDashboard_1.0.6\\resources\\.editors\\Creator\\2.4.5\\CocosCreator.exe';
+if (process.platform !== 'win32') {
+  creatorBasePath = "/Applications/CocosCreator/Creator/2.4.5/CocosCreator.app/Contents/MacOS/CocosCreator";
+}
+const buildCocos = function (args) {
+  return new Promise((resolve, reject) => {
+    const buffer = spawn(
+      creatorBasePath,
+      args,
+      { cwd: '.' }
+    );
+
+    buffer.stdout.on('data', (data) => {
+      console.log(`stdout: ${data}`);
+    });
+
+    buffer.stderr.on('data', (data) => {
+      console.error(`stderr: ${data}`);
+    });
+
+    buffer.on('close', (code) => {
+      console.log(`child process exited with code ${code}`);
+      resolve();
+    });
+  });
+};
+
+function getReleaseFileName(projectName) {
+  let date = new Date();
+  let fileName = `${projectName}_${date.getFullYear()}${fix2(date.getMonth() + 1)}${fix2(date.getDate())} `;
+  fileName += `${fix2(date.getHours())}-${fix2(date.getMinutes())}-${fix2(date.getSeconds())}`;
+  return fileName;
+}
+
+function getFolderName(path) {
+  let folderName = '';
+  fs.readdirSync(path).find(fileName => {
+    const st = fs.statSync(`${path}/${fileName}`);
+    if (st.isDirectory()) {
+      folderName = fileName;
+    }
+  });
+  return folderName;
+}
+function editFolderMeta(path, folderName, isBundle) {
+  const metaPath = `${path}/${folderName}.meta`;
+  const metaDataStr = fs.readFileSync(metaPath);
+  const metaData = JSON.parse(metaDataStr);
+  metaData.isBundle = isBundle;
+  metaData.isRemoteBundle = {
+    ios: isBundle,
+    android: isBundle
+  };
+  fs.writeFileSync(metaPath, JSON.stringify(metaData));
+}
+
+async function buildWebDesktop() {
+  const args = ['--path', './', '--build', 'platform=web-desktop;debug=true', '--force'];
+  await buildCocos(args);
+}
+
+async function buildAndroidBundle() {
+  const args = ['--path', './', '--build', "platform=ios;debug=false;md5Cache=true;buildPath=build_android;appABIs=['armeabi-v7a','x86','x86_64','arm64-v8a'];encryptJs=true;xxteaKey=6bbfce23-28b4-4a;zipCompressJs=true", '--force'];
+  await buildCocos(args);
+}
+
+async function buildIosBundle() {
+  const args = ['--path', './', '--build', "platform=ios;debug=false;md5Cache=true;buildPath=build_ios;encryptJs=true;xxteaKey=6bbfce23-28b4-4a;zipCompressJs=true", '--force'];
+  await buildCocos(args);
+}
+
+async function buildWebBundle() {
+  const args = ['--path', './', '--build', "platform=web-desktop;debug=false;buildPath=build_web_desktop", '--force'];
+  await buildCocos(args);
+}
+
+function createConfigFile (projectName, type) {
+  let iosVersion = "";
+  let androidVersion = "";
+  if(!type){
+    const androidPaths = fs.readdirSync(`dist/android/${projectName}`);
+    const androidConfigFileName = androidPaths.find(path => path.indexOf('config') == 0);
+    androidVersion = androidConfigFileName.split('.')[1];
+    const iosPaths = fs.readdirSync(`dist/ios/${projectName}`);
+    const iosConfigFileName = iosPaths.find(path => path.indexOf('config') == 0);
+    iosVersion = iosConfigFileName.split('.')[1];
+  } else {
+    if(type=="android"){
+      const androidPaths = fs.readdirSync(`dist/android/${projectName}`);
+      const androidConfigFileName = androidPaths.find(path => path.indexOf('config') == 0);
+      androidVersion = androidConfigFileName.split('.')[1];
+    }else{
+      const iosPaths = fs.readdirSync(`dist/ios/${projectName}`);
+      const iosConfigFileName = iosPaths.find(path => path.indexOf('config') == 0);
+      iosVersion = iosConfigFileName.split('.')[1];
+    }
+  }
+  
+  const config = {
+    "ios": {
+      "sceneName": projectName,
+      "version": iosVersion
+    },
+    "android": {
+      "sceneName": projectName,
+      "version": androidVersion
+    }
+  }
+
+  fs.writeFileSync('dist/config.json', JSON.stringify(config));
+}
+
+function compressAll (projectName) {
+  const tarStream = new compressing.zip.Stream();
+  tarStream.addEntry('dist/play');
+  tarStream.addEntry('dist/form');
+  tarStream.addEntry('dist/ios');
+  tarStream.addEntry('dist/android');
+  tarStream.addEntry('dist/web_desktop');
+  tarStream.addEntry('dist/config.json');
+  const destStream = fs.createWriteStream(`publish/${getReleaseFileName(projectName)}.zip`);
+  tarStream.pipe(destStream);
+}
+
+function build_check () {
+  const dirNames = process.cwd().split(/\/|\\/);
+  const projectName = dirNames[dirNames.length - 1];
+  const path = 'assets'
+  let folderName = '';
+  fs.readdirSync(path).find(fileName => {
+    const st = fs.statSync(`${path}/${fileName}`);
+    if (st.isDirectory()) {
+      folderName = fileName;
+    }
+  });
+
+  if (projectName != folderName) {
+    throw (`项目名(${projectName})与bundle文件夹名(${folderName})不相同`);
+  }
+  let same = false;
+  const files = fs.readdirSync(`${path}/${folderName}/scene`);
+  files.forEach(fileName => {
+    fileName.split('.').forEach((str, idx, arr) => {
+      if (str == 'fire') {
+        const sceneName = arr[idx - 1];
+        if (folderName == sceneName) {
+          same = true;
+        }
+      }
+    })
+  });
+
+  if (!same) {
+    throw (`bundle文件夹名称(${folderName})与scene名称不相同`);
+  }
+
+  return projectName;
+}
+
+function changeSettingToWebDesktop () {
+  const path = 'assets'
+  const folderName = getFolderName(path);
+  editFolderMeta(path, folderName, false);
+}
+
+function changeSettingsToBundle () {
+  const path = 'assets'
+  const folderName = getFolderName(path);
+  editFolderMeta(path, folderName, true);
+}
+
+
+function replaceUuids () {
+  console.log('build_step_0 开始~!');
+
+  const path = 'assets'
+  function getFolderName(path) {
+    let folderName = '';
+    fs.readdirSync(path).find(fileName => {
+      const st = fs.statSync(`${path}/${fileName}`);
+      if (st.isDirectory()) {
+        folderName = fileName;
+      }
+    });
+    return folderName;
+  }
+  const folderName = getFolderName(path);
+
+  let oldFireUuid = '';
+  let oldJsUuid = '';
+  let oldJsShortUuid = '';
+  let oldJsId = '';
+  const fireMetaStr = fs.readFileSync(`assets/${folderName}/scene/${folderName}.fire.meta`);
+  if (fireMetaStr.indexOf('57ea7c61-9b8b-498a-b024-c98ee9124beb') > 0) {
+    // 老Cocos脚手架
+    oldFireUuid = '57ea7c61-9b8b-498a-b024-c98ee9124beb';
+    oldJsUuid = 'f4ede462-f8d7-4069-ba80-915611c058ca';
+    oldJsShortUuid = 'f4edeRi+NdAabqAkVYRwFjK';
+    oldJsId = 'e687yyoRBIzZAOVRL8Sseh';
+  }
+  if (fireMetaStr.indexOf('0737ce42-24f0-45c6-8e1a-8bdab4f74ba3') > 0) {
+    // 新Cocos脚手架
+    oldFireUuid = '0737ce42-24f0-45c6-8e1a-8bdab4f74ba3';
+    oldJsUuid = '408a67f8-65fa-4cf1-8cf2-83e20e1a0fd5';
+    oldJsShortUuid = '408a6f4ZfpM8Yzyg+IOGg/V';
+    oldJsId = 'eaTVUpqahPfZeO9+sUI7RP';
+  }
+  if (oldFireUuid === '') {
+    return;
+  }
+
+  function editFolderMeta(path, folderName) {
+    const metaPath = `${path}/${folderName}.meta`;
+    const metaDataStr = fs.readFileSync(metaPath);
+    const metaData = JSON.parse(metaDataStr);
+    metaData.isBundle = false;
+    fs.writeFileSync(metaPath, JSON.stringify(metaData));
+  }
+  function fileReplace(path, replaceStr, newStr) {
+    if (!fs.existsSync(path)) {
+      return;
+    }
+
+    const fileStr = fs.readFileSync(path);
+    const newFileStr = fileStr.toString().replace(new RegExp(replaceStr.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), 'g'), newStr);
+    fs.writeFileSync(path, newFileStr);
+  }
+  function getShortUuid(uuid) {
+    const bytes = parse(uuid).subarray(1);
+    return uuid.substring(0, 5) + Base64.fromUint8Array(bytes).substring(2);
+  }
+
+  editFolderMeta(path, folderName);
+
+  const newFireUuid = v4();
+  fileReplace(`assets/${folderName}/scene/${folderName}.fire.meta`, oldFireUuid, newFireUuid);
+  fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldFireUuid, newFireUuid);
+  fileReplace('settings/builder.json', oldFireUuid, newFireUuid);
+
+  const newJsUuid = v4();
+  const newJsShortUuid = getShortUuid(newJsUuid);
+  const newJsId = v4().replace(/-/g, '').substring(0, oldJsId.length);
+  fileReplace(`assets/${folderName}/scene/${folderName}.ts.meta`, oldJsUuid, newJsUuid);
+  fileReplace(`assets/${folderName}/scene/${folderName}.js.meta`, oldJsUuid, newJsUuid);
+  fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldFireUuid, newFireUuid);
+  fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldJsShortUuid, newJsShortUuid);
+  fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldJsId, newJsId);
+
+  console.log('build_step_0 完成~!');
+}
+
+function replaceIndexHtml () {
+  const data = fs.readFileSync('index.html');
+  fs.writeFileSync('dist/play/index.html', data);
+}
+
+module.exports = {
+
+  build: async function () {
+
+    const startTime = new Date().getTime();
+  
+    // 构建前检查
+    const projectName = build_check();
+  
+    // 清理旧文件
+  
+    // 构建form
+    await removeDir('dist/form');
+    await buildForm();
+  
+    // 替换uuid
+    replaceUuids();
+  
+    // 改设置为非bundle
+    changeSettingToWebDesktop();
+  
+    // 构建play
+    await removeDir('dist/play');
+    await buildWebDesktop();
+    await copyDir('build/web-desktop', 'dist/play');
+    replaceIndexHtml();
+    console.log('构建 web desktop 成功!');
+  
+    // 改设置为bundle
+    changeSettingsToBundle();
+  
+    await removeDir('dist/android');
+    await buildAndroidBundle();
+    await copyDir('build_android/jsb-link/remote', 'dist/android');
+    console.log('构建 android bundle 成功!');
+  
+    await removeDir('dist/ios');
+    await buildIosBundle();
+    await copyDir('build_ios/jsb-link/remote', 'dist/ios');
+    console.log('构建 ios bundle 成功!');
+  
+    await removeDir('dist/web_desktop');
+    await buildWebBundle();
+    await copyDir(`build_web_desktop/web-desktop/assets/${projectName}`, 'dist/web_desktop');
+    console.log('构建 web bundle 成功!');
+  
+    // 改设置为非bundle
+    changeSettingToWebDesktop();
+  
+    createConfigFile(projectName);
+  
+    compressAll(projectName);
+
+    await removeDir('build');
+    await removeDir('build_android');
+    await removeDir('build_ios');
+    await removeDir('build_web_desktop');
+
+    const endTime = new Date().getTime();
+    const duration = new Date(endTime - startTime);
+    console.log(`打包完成!`);
+    console.log(`用时${duration.getMinutes()}分${duration.getSeconds()}秒。`);
+  },
+
+  buildAndroid: async function () {
+
+    // 构建前检查
+    const projectName = build_check();
+    // 替换uuid
+    replaceUuids();
+    // 改设置为bundle
+    changeSettingsToBundle();
+  
+    await removeDir('dist/android');
+    await buildAndroidBundle();
+    await copyDir('build_android/jsb-link/remote', 'dist/android');
+    
+    // 改设置为非bundle
+    changeSettingToWebDesktop();
+    createConfigFile(projectName, "android");
+    await removeDir('build_android');
+    console.log('构建 android bundle 成功!');
+  },
+
+  buildIos: async function () {
+
+    // 构建前检查
+    const projectName = build_check();
+    // 替换uuid
+    replaceUuids();
+    // 改设置为bundle
+    changeSettingsToBundle();
+  
+    await removeDir('dist/ios');
+    await buildIosBundle();
+    await copyDir('build_ios/jsb-link/remote', 'dist/ios');
+
+    // 改设置为非bundle
+    changeSettingToWebDesktop();
+    createConfigFile(projectName, "ios");
+    await removeDir('build_ios');
+    console.log('构建 ios bundle 成功!');
+  }
+
+};
diff --git a/bin/utils.js b/bin/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..de12653df3d838cd2e18c04a010ebc51e2dfdc57
--- /dev/null
+++ b/bin/utils.js
@@ -0,0 +1,57 @@
+const fs = require('fs');
+
+const removeDir =  async function (src) {
+  const exists = await fs.existsSync(src);
+  if (!exists) {
+    return;
+  }
+
+  //读取目录
+  const st = await fs.statSync(src);
+  const paths = await fs.readdirSync(src);
+  for (let i = 0; i < paths.length; i++) {
+    let path = paths[i];
+    const newSrc = `${src}/${path}`;
+    const st = await fs.statSync(newSrc);
+    if (st.isFile()) {
+      console.log('remove: ' + newSrc);
+      await fs.unlinkSync(newSrc);
+    } else if (st.isDirectory()) {
+      await removeDir(newSrc);
+    }
+  }
+  await fs.rmdirSync(src);
+}
+
+const copyDir = async function (src, dst) {
+  const exists = await fs.existsSync(dst);
+  if (!exists) {
+    await fs.mkdirSync(dst);
+  }
+  //读取目录
+  const paths = await fs.readdirSync(src);
+  for (let i = 0; i < paths.length; i++) {
+    let path = paths[i];
+    const newSrc = `${src}/${path}`;
+    const newDst = `${dst}/${path}`;
+    const st = await fs.statSync(newSrc);
+    if (st.isFile()) {
+      console.log('copy: ' + newDst);
+      const data = await fs.readFileSync(newSrc);
+      await fs.writeFileSync(newDst, data);
+    } else if (st.isDirectory()) {
+      await copyDir(newSrc, newDst);
+    }
+  }
+};
+module.exports = {
+  fix2: function (num) {
+    if (num >= 10) {
+      return '' + num;
+    } else {
+      return '0' + num;
+    }
+  },
+  copyDir: copyDir,
+  removeDir: removeDir,
+};
diff --git a/play/creator.d.ts b/creator.d.ts
similarity index 100%
rename from play/creator.d.ts
rename to creator.d.ts
diff --git a/publish/publish/.keep b/dist/.keep
similarity index 100%
rename from publish/publish/.keep
rename to dist/.keep
diff --git a/publish/index.html b/index.html
similarity index 95%
rename from publish/index.html
rename to index.html
index d4bf389faec104cc5286634abc03c84037876a0d..b0ca3a534085851fcf7119afc4cbeafaf635bed3 100644
--- a/publish/index.html
+++ b/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/play/jsconfig.json b/jsconfig.json
similarity index 100%
rename from play/jsconfig.json
rename to jsconfig.json
diff --git a/package.json b/package.json
index 3ea4ce52b037efdc3a7ec8f90a0cd936667d21ea..bbbea61a6a8048babb55235d095efcb6fd09433a 100644
--- a/package.json
+++ b/package.json
@@ -5,12 +5,17 @@
   "main": "build.js",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
-    "build": "sh ./publish/build.sh",
-    "win": "cd publish && build.cmd"
+    "publish": "node ./bin/build.js",
+    "start": "node ./bin/app.js"
   },
   "author": "",
   "license": "ISC",
   "dependencies": {
-    "compressing": "^1.5.0"
+    "base-64": "^1.0.0",
+    "compressing": "^1.5.1",
+    "js-base64": "^3.7.2",
+    "uuid": "^8.3.2",
+    "child_process": "^1.0.2",
+    "express": "^4.17.1"
   }
 }
diff --git a/play/.gitignore b/play/.gitignore
deleted file mode 100644
index c072d29adcca12daa3412d534483817b1c77c77f..0000000000000000000000000000000000000000
--- a/play/.gitignore
+++ /dev/null
@@ -1,53 +0,0 @@
-#/////////////////////////////////////////////////////////////////////////////
-# Fireball Projects
-#/////////////////////////////////////////////////////////////////////////////
-
-/library/
-/temp/
-/local/
-/build/
-
-#/////////////////////////////////////////////////////////////////////////////
-# npm files
-#/////////////////////////////////////////////////////////////////////////////
-
-npm-debug.log
-node_modules/
-
-#/////////////////////////////////////////////////////////////////////////////
-# Logs and databases
-#/////////////////////////////////////////////////////////////////////////////
-
-*.log
-*.sql
-*.sqlite
-
-#/////////////////////////////////////////////////////////////////////////////
-# files for debugger
-#/////////////////////////////////////////////////////////////////////////////
-
-*.sln
-*.csproj
-*.pidb
-*.unityproj
-*.suo
-
-#/////////////////////////////////////////////////////////////////////////////
-# OS generated files
-#/////////////////////////////////////////////////////////////////////////////
-
-.DS_Store
-ehthumbs.db
-Thumbs.db
-
-#/////////////////////////////////////////////////////////////////////////////
-# WebStorm files
-#/////////////////////////////////////////////////////////////////////////////
-
-.idea/
-
-#//////////////////////////
-# VS Code files
-#//////////////////////////
-
-.vscode/
diff --git a/play/project.json b/project.json
similarity index 100%
rename from play/project.json
rename to project.json
diff --git a/publish/.DS_Store b/publish/.DS_Store
index f522f3d131eb78762494367bf67258334990f6fc..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 100644
Binary files a/publish/.DS_Store and b/publish/.DS_Store differ
diff --git a/publish/build.cmd b/publish/build.cmd
deleted file mode 100644
index 359cf711ace5cbfb37e07082809e4623f73ff34a..0000000000000000000000000000000000000000
--- a/publish/build.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-cd ../form & npm install & npm run publish & cd ../play & CocosCreator.exe --path "./" --build "platform=web-desktop;debug=true" --force & cd ../publish & node build.js
-pause
diff --git a/publish/build.js b/publish/build.js
deleted file mode 100644
index 670f7c73ae517c4eae995c16cadc43b1167e0750..0000000000000000000000000000000000000000
--- a/publish/build.js
+++ /dev/null
@@ -1,85 +0,0 @@
-let fs = require('fs');
-const compressing = require('compressing');
-
-function fix2(num) {
-    if (num >= 10) {
-        return '' + num;
-    } else {
-        return '0' + num;
-    }
-}
-
-async function copyDir(src, dst) {
-    const exists = await fs.existsSync(dst);
-    if (!exists) {
-        await fs.mkdirSync(dst);
-    }
-    //读取目录
-    const paths = await fs.readdirSync(src);
-    for (let i = 0; i < paths.length; i++) {
-        let path = paths[i];
-        const newSrc = `${src}/${path}`;
-        const newDst = `${dst}/${path}`;
-        const st = await fs.statSync(newSrc);
-        if (st.isFile()) {
-            console.log('copy: ' + newDst);
-            const data = await fs.readFileSync(newSrc);
-            await fs.writeFileSync(newDst, data);
-        } else if (st.isDirectory()) {
-            copyDir(newSrc, newDst);
-        }
-    }
-}
-
-async function removeDir(src) {
-    const exists = await fs.existsSync(src);
-    if (!exists) {
-        return;
-    }
-
-    //读取目录
-    const st = await fs.statSync(src);
-    console.log(st);
-    const paths = await fs.readdirSync(src);
-    for (let i = 0; i < paths.length; i++) {
-        let path = paths[i];
-        const newSrc = `${src}/${path}`;
-        const st = await fs.statSync(newSrc);
-        if (st.isFile()) {
-            console.log('remove: ' + newSrc);
-            await fs.unlinkSync(newSrc);
-        } else if (st.isDirectory()) {
-            await removeDir(newSrc);
-        }
-    }
-    await fs.rmdirSync(src);
-}
-
-async function main() {
-    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())}`;
-
-    await removeDir('./publish/play');
-    await removeDir('./publish/form');
-
-    await copyDir('../play/build/web-desktop', './publish/play');
-
-    const data = await fs.readFileSync('./index.html');
-    await fs.writeFileSync('./publish/play/index.html', data);
-
-    compressing.zip.uncompress('../form/publish/form.zip', './publish/form')
-        .then(() => {
-            const tarStream = new compressing.zip.Stream();
-            tarStream.addEntry('./publish/play');
-            tarStream.addEntry('./publish/form');
-
-            const destStream = fs.createWriteStream(`publish/${fileName}.zip`);
-
-            tarStream.pipe(destStream);
-
-            console.log('打包完成!');
-        });
-}
-
-main();
\ No newline at end of file
diff --git a/publish/build.sh b/publish/build.sh
deleted file mode 100644
index 02779c581b2b92b339cc91cc4f9c681883e5debb..0000000000000000000000000000000000000000
--- a/publish/build.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-cd form 
-
-npm install
-
-npm run publish 
-
-cd ../play
-
-/Applications/CocosCreator/Creator/2.4.0/CocosCreator.app/Contents/MacOS/CocosCreator --path "./" --build "platform=web-desktop;debug=true" --force
-
-cd ../publish 
-
-node build.js
diff --git a/publish/buildConfig.json b/publish/buildConfig.json
deleted file mode 100644
index bd10daa5522973270ad187cd4d30a3eab954d4d2..0000000000000000000000000000000000000000
--- a/publish/buildConfig.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-	"platform": "web-desktop",
-	"debug": true
-}
\ No newline at end of file
diff --git a/publish/package-lock.json b/publish/package-lock.json
deleted file mode 100644
index e830904f310afa074d35aed98cd67eb25953bdfa..0000000000000000000000000000000000000000
--- a/publish/package-lock.json
+++ /dev/null
@@ -1,253 +0,0 @@
-{
-  "name": "publish",
-  "version": "1.0.0",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "bl": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
-      "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
-      "requires": {
-        "readable-stream": "^2.3.5",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "buffer-alloc": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
-      "requires": {
-        "buffer-alloc-unsafe": "^1.1.0",
-        "buffer-fill": "^1.0.0"
-      }
-    },
-    "buffer-alloc-unsafe": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
-    },
-    "buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
-    },
-    "buffer-fill": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
-    },
-    "compressing": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/compressing/-/compressing-1.5.1.tgz",
-      "integrity": "sha512-1AGBR4Vh0/rpPKSXHoV9cerLo0CUlAhZ/xsJqU3a9+2cbSaFjWT3fk2MIGkCnbpk//DGWrcWw03rhKFQrA9RQw==",
-      "requires": {
-        "flushwritable": "^1.0.0",
-        "get-ready": "^1.0.0",
-        "iconv-lite": "^0.5.0",
-        "mkdirp": "^0.5.1",
-        "pump": "^3.0.0",
-        "streamifier": "^0.1.1",
-        "tar-stream": "^1.5.2",
-        "yauzl": "^2.7.0",
-        "yazl": "^2.4.2"
-      }
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-      "requires": {
-        "once": "^1.4.0"
-      }
-    },
-    "fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
-      "requires": {
-        "pend": "~1.2.0"
-      }
-    },
-    "flushwritable": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz",
-      "integrity": "sha1-PjKNj95BKtR+c44751C00pAENJg="
-    },
-    "fs-constants": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
-      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
-    },
-    "get-ready": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz",
-      "integrity": "sha1-+RgX8emt7P6hOlYq38jeiDqzR4I="
-    },
-    "iconv-lite": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
-      "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
-    },
-    "mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-      "requires": {
-        "minimist": "^1.2.5"
-      }
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
-    },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-    },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "streamifier": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
-      "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8="
-    },
-    "string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "tar-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
-      "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
-      "requires": {
-        "bl": "^1.0.0",
-        "buffer-alloc": "^1.2.0",
-        "end-of-stream": "^1.0.0",
-        "fs-constants": "^1.0.0",
-        "readable-stream": "^2.3.0",
-        "to-buffer": "^1.1.1",
-        "xtend": "^4.0.0"
-      }
-    },
-    "to-buffer": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
-      "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
-    "yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
-      "requires": {
-        "buffer-crc32": "~0.2.3",
-        "fd-slicer": "~1.1.0"
-      }
-    },
-    "yazl": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
-      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
-      "requires": {
-        "buffer-crc32": "~0.2.3"
-      }
-    }
-  }
-}
diff --git a/publish/package.json b/publish/package.json
deleted file mode 100644
index dd6a002f1c25440c2ce53f9dd139c3b60beab4a0..0000000000000000000000000000000000000000
--- a/publish/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "publish",
-  "version": "1.0.0",
-  "description": "",
-  "main": "build.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
-  },
-  "author": "",
-  "license": "ISC",
-  "dependencies": {
-    "compressing": "^1.5.1"
-  }
-}
diff --git a/publish/publish/.DS_Store b/publish/publish/.DS_Store
deleted file mode 100644
index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000
Binary files a/publish/publish/.DS_Store and /dev/null differ
diff --git a/play/settings/builder.json b/settings/builder.json
similarity index 100%
rename from play/settings/builder.json
rename to settings/builder.json
diff --git a/play/settings/project.json b/settings/project.json
similarity index 100%
rename from play/settings/project.json
rename to settings/project.json
diff --git a/play/settings/services.json b/settings/services.json
similarity index 100%
rename from play/settings/services.json
rename to settings/services.json
diff --git a/play/tsconfig.json b/tsconfig.json
similarity index 100%
rename from play/tsconfig.json
rename to tsconfig.json