三、配置webpack

当我们安装好 vue-loader 和 vue-template-compiler 后,我们就可以去配置webpack 让他可以解析.vue单文件了。

这里多嘴一句,为什么必须要安装 vue-template-compiler 这个插件?

实际上vue-loader并不会去解析template模板,他只是帮助webpack去处理.vue文件,当进入到.vue文件后,处理template模板的时候,就用到了 vue-template-compiler 插件,他会去把 template 模板字符串转化为 render函数,以便构建vNode。

(1)配置 webpack的 entry

打开webpack.config.js文件,写入以下代码:

let path = require('path')
module.exports = {
  entry: path.resolve(__dirname, 'main.js')
}

entry是用来配置webpack的入口文件,当我们在命令行输入webpack的打包命令的时候,webpack会去读取根目录的webpack.config.js文件,然后根据entry配置的地址找到入口文件。这里我们设置 main.js 为入口文件。

(2)配置webpack的 output

在 module.exports 中增加如下代码:

output: {
    path: path.resolve(__dirname, 'dist'),
    filename: "bundle.js", // string    // 输出文件的名称
    publicPath: "", // string    // 相对于HTML页面解析的输出目录的url
}

path属性是指压缩完毕,压缩的文件要放到哪个文件夹下面

filename属性是指,压缩后的js文件名叫什么

publicePath这个属性是个大坑!!!它在不同的环境下有不同的意思!有时间我会单独写个博客说明这个属性!现在这个属性可以不配置,或者配置为空即可。

(3)配置webpack的 module 

在 module.exports 中增加如下代码并在终端输入命令 npm i  --save-dev css-loader style-loader 

module: {
    rules: [
      {
        test: /\.vue$/,
        use: ['vue-loader']
      }, {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  }

通过语义我们应该也可以看出,rules是规则,在里面有一个个对象,test的属性值是正则,即,如果碰到.vue结尾的文件,那么使用vue-loader去处理他。如果碰到.css结尾的文件,那么 先使用css-loader去解析他,然后再使用style-loader去处理他,注意这个顺序是从右到左执行的。 css-loader很容易理解是处理css文件了,那style-loader是做什么的? style-loader接收从css-loader传过来的css样式,然后把它们解析成字符串放到js文件里面,在浏览器解析js文件的时候,通过js动态的向head标签里面增加style标签添加样式。如果不想把css放到js文件里面,可以使用插件 extract-text-webpack-plugin 把css文件单独提取出来。

(4)配置webpack的 plugin

// 在头部引入 VueLoaderPlugin
let VueLoaderPlugin = require('vue-loader/lib/plugin')


plugins: [
    // 为了vue-loader安装的插件
    new VueLoaderPlugin()
  ]

(5)打开App.vue,按照格式输入以下代码:

<template>
  <div>
    <h1>
      hello vue
    </h1>
  </div>
</template>
<script>
export default {
  
}
</script>
<style>
</style>

然后再终端输入: webpack  回车!

这时候会发现在根目录下出现了一个 dist 文件夹 这是我们在output里面配置的,把输出文件放到dist下。接着我们进入index.html文件,在body标签里面加入:

<div id="app"></div>
<script src="./dist/bundle.js"></script>

然后打开index.html文件,发现界面上已经显示 hello vue。这说明,我们之前所有的配置都是正确的!

至此,我们完成了webpack的一些基本配置。但是每次调试都要打包实在太麻烦,如果想实现热更新要怎么做,而且现在是直接打开index.html,使用的是file协议,如果想发送ajax就不行了,怎么办?

答案就是: 使用webpack让他来帮我们开启一个服务器,并监听文件和页面,当文件有保存的行为时,立刻刷新页面。

下一章: 不使用 vue-cli 去搭建一个 vue + webpack 的准备项目 (配置详解)(三)webpack配置devServer,详细说明原理。