title: Installing TypeScript w/Vue CLI returns *Cannot find module 'eslint-plugin-@typescript-eslint'*
body: <p>I'm trying to install TypeScript to our Marketing Site. Using:</p>
  
  <p><code>vue add typescript</code></p>
  
  <p>Once installed I get the error: </p>
  
  <pre><code>Module build failed (from ./node_modules/thread-loader/dist/cjs.js):
  Thread Loader (Worker 0)
  Failed to load plugin @typescript-eslint: Cannot find module 'eslint-plugin-@typescript-eslint'
  </code></pre>
  
  <p>Things I've tried:</p>
  
  <ol>
  <li>Installing <code>eslint-plugin-@typescript-eslint</code></li>
  <li>Updating NPM packages, including <code>@vue/eslint-config-typescript</code></li>
  <li>Using require instead of import in <code>main.ts</code></li>
  <li>Messing around with configs in <code>vue.config.js</code> but no luck</li>
  <li>Updating the Vue CLI</li>
  </ol>
  
  <p>Currently using <code>@vue/cli 4.1.2</code>
  Any ideas?</p>
  
  <p><code>vue.config.js</code> file:</p>
  
  <pre><code>const preRender = require('prerender-spa-plugin');
  const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  const isProd = process.env.NODE_ENV === 'production';
  const path = require('path');
  
  module.exports = {
    chainWebpack: config =&gt; {
      config.module
        .rule('svg')
        .use('file-loader')
        .loader('vue-svg-loader');
    },
  
    configureWebpack: () =&gt; {
      {
        isProd
          ? [
            new UglifyJsPlugin({
              uglifyOptions: {
                compress: {
                  drop_console: true
                }
              }
            })
          ]
          : [];
      }
  
      if (process.env.NODE_ENV !== 'production') return;
  
      return {
        plugins: [
          new preRender(path.resolve(__dirname, 'dist'), [
            '/',
          ])
        ],
        watchOptions: {
          aggregateTimeout: 300,
          poll: 1000
        }
      };
    },
    css: {
      loaderOptions: {
        scss: {
          prependData: '@import "@/app.scss";'
        }
      },
      sourceMap: true
    }
  };
  </code></pre>
  
  <p><code>tsconfig.json</code> file;</p>
  
  <pre><code>{
    "compilerOptions": {
      "target": "esnext",
      "module": "esnext",
      "strict": true,
      "jsx": "preserve",
      "importHelpers": true,
      "moduleResolution": "node",
      "experimentalDecorators": true,
      "esModuleInterop": true,
      "allowSyntheticDefaultImports": true,
      "sourceMap": true,
      "baseUrl": ".",
      "types": [
        "webpack-env",
        "jest"
      ],
      "paths": {
        "@/*": [
          "src/*"
        ]
      },
      "lib": [
        "esnext",
        "dom",
        "dom.iterable",
        "scripthost"
      ]
    },
    "include": [
      "src/**/*.ts",
      "src/**/*.tsx",
      "src/**/*.vue",
      "tests/**/*.ts",
      "tests/**/*.tsx"
    ],
    "exclude": [
      "node_modules"
    ]
  }
  </code></pre>
  
  <p><code>main.ts</code> file:</p>
  
  <pre><code>import Vue from 'vue';
  import App from './App.vue';
  import router from './router';
  import VueTouch from 'vue-touch';
  import VueAnalytics from 'vue-analytics';
  
  const isProd = process.env.NODE_ENV === 'production';
  
  Vue.use(VueAnalytics, {
    id: process.env.VUE_APP_GA,
    router,
    debug: {
      enabled: false,
      sendHitTask: isProd
    }
  });
  
  Vue.use(VueTouch);
  Vue.config.productionTip = false;
  
  new Vue({
    router,
    render: h =&gt; h(App)
  }).$mount('#app');
  </code></pre>