webpack处理vue

使用vue-loader,vue-loader含loader和plugin,需同时使用。

vue-loader会把.vue文件编译成html、css、js/ts 3个部分,再让ts-loader,css-loader等去进一步编译。

const path = require('path')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  devServer: {
    hot: true,
    open: true
  },
  module: {
    rules: [
      { test: /\.vue$/, use: ['vue-loader'] },
      { test: /\.css$/, use: ["style-loader", "css-loader"] },
    ]
  },
  plugins: [
    new VueLoaderPlugin(),
    new HtmlWebpackPlugin({
      templateContent: `
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Webpack App</title>
  </head>
  <body>
    <div id="app" />
  </body>
</html>
    `
    })
  ]
}

注意,使用ts时ts-loader无法识别vue文件,需要添加声明文件src/shims-vue.d.ts

declare module '*.vue' {
  import { ComponentOptions } from 'vue'
  const componentOptions: ComponentOptions
  export default componentOptions
}

declare module 'vue/types/vue' {
  // import VueRouter, { Route } from 'vue-router';
  interface Vue {
    // $router: VueRouter; // 这表示this下有这个东西
    // $route: Route;
    $http: any;
    $Message: any;
    $Modal: any;
  }
}