build: update webpack for npm linking plugins (#11253)

diff --git a/superset-frontend/tsconfig.json b/superset-frontend/tsconfig.json
index 3f4dce9..6a8959e 100644
--- a/superset-frontend/tsconfig.json
+++ b/superset-frontend/tsconfig.json
@@ -30,5 +30,6 @@
     "./node_modules/*superset-ui*/**/types/**/*",
     // and the type defs of their dependencies
     "./node_modules/*superset-ui*/**/node_modules/**/*.d.ts"
-  ]
+  ],
+  "exclude": ["./node_modules/*superset-ui*/**/node_modules/@superset-ui/**/*"]
 }
diff --git a/superset-frontend/webpack.config.js b/superset-frontend/webpack.config.js
index 51e7eb2..26f769c 100644
--- a/superset-frontend/webpack.config.js
+++ b/superset-frontend/webpack.config.js
@@ -265,12 +265,19 @@
     },
   },
   resolve: {
+    modules: [APP_DIR, 'node_modules'],
     alias: {
-      src: path.resolve(APP_DIR, './src'),
       'react-dom': '@hot-loader/react-dom',
-      stylesheets: path.resolve(APP_DIR, './stylesheets'),
-      images: path.resolve(APP_DIR, './images'),
-      spec: path.resolve(APP_DIR, './spec'),
+      // force using absolute import path of the @superset-ui/core and @superset-ui/chart-controls
+      // so that we can `npm link` viz plugins without linking these two base packages
+      '@superset-ui/core': path.resolve(
+        APP_DIR,
+        './node_modules/@superset-ui/core',
+      ),
+      '@superset-ui/chart-controls': path.resolve(
+        APP_DIR,
+        './node_modules/@superset-ui/chart-controls',
+      ),
     },
     extensions: ['.ts', '.tsx', '.js', '.jsx'],
     symlinks: false,