diff --git a/package-lock.json b/package-lock.json
index 6c4f12199baa2df134069e76ed5d5989b2d20e99..cb97d9875993ea17d0b4fbcff908919e6f950985 100644
Binary files a/package-lock.json and b/package-lock.json differ
diff --git a/package.json b/package.json
index 0eac8431a1be3d8f5d0be6b5764613d38beac0a3..464e539886fd65104e9fba1013546b47bd4094f6 100644
--- a/package.json
+++ b/package.json
@@ -12,9 +12,9 @@
   },
   "scripts": {
     "lint": "tslint src/**/*.ts",
-    "build": "tsc",
-    "postbuild": "copyfiles --up 1 src/mol-gl/shader/*.vert src/mol-gl/shader/*.frag src/mol-gl/shader/*.glsl build/node_modules/",
+    "build": "cpx \"src/**/*.{vert,frag,glsl}\" build/node_modules/ && tsc",
     "watch": "tsc -watch",
+    "watch-shader": "cpx \"src/**/*.{vert,frag,glsl}\" build/node_modules/ --watch",
     "test": "jest",
     "script": "node build/node_modules/script.js",
     "app-render-test": "webpack build/node_modules/apps/render-test/index.js --mode development -o web/render-test/index.js",
@@ -62,6 +62,8 @@
     "@types/react-dom": "^16.0.4",
     "benchmark": "^2.1.4",
     "copyfiles": "^2.0.0",
+    "cpx": "^1.5.0",
+    "extra-watch-webpack-plugin": "^1.0.1",
     "glslify-import": "^3.1.0",
     "glslify-loader": "^1.0.2",
     "jest": "^22.4.2",
diff --git a/webpack.config.js b/webpack.config.js
index a3fe2faee33a6b2e0d8dd6152c20e22d948ce87f..50bbc097e6756fd979282cc0df0fbd5a06e1fb53 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,4 +1,5 @@
 const path = require('path');
+const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin');
 module.exports = {
     module: {
         rules: [
@@ -13,5 +14,10 @@ module.exports = {
                 include: [ path.resolve(__dirname, "build/node_modules/") ]
             }
         ]
-    }
+    },
+    plugins: [
+        new ExtraWatchWebpackPlugin({
+            files: [ './**/*.vert', './**/*.frag', './**/*.glsl' ],
+        }),
+    ],
 }
\ No newline at end of file