@toc
vue 开发环境搭建
初始化
-
创建一个文件夹,
手动在文件管理器里面创建或者通过命令创建,
mkdir vuewebpack && cd vuewebpack
创建 vuewebpack 文件夹 并切换到 vuewebpack 文件夹下面
-
npm 初始化 todo 关于 npm 命令
npm init -y
安装基本的包
vue、webpack、webpack-cli
-
安装 vue
npm i vue -S
-
安装 webpack、webpack-cli
npm i webpack webpack-cli -D
使用 webpack
-
安装使用 webpack
-
使用 webpack 插件 html-webpack-plugin
-
clean-webpack-plugin
动态控制生成的文件名之后,每次构建都会生成不同的文件,不会将之前的文件覆盖掉,dist 文件夹下会存在大量的无效文件。每次构建之前需要手动将上一次构建的结果删除掉,以保证 dist 文件夹中构建结果是最新的,否则很难区分哪些文件时本次构建生成的,哪些是之前生成的。就需要这个插件来清理上一次的构建结果。
-
webpack-dev-server
每次修改完代码,需要手动启动 webpack 打包代码,构建完成后都需要在浏览器中手动刷新,以查看最新的构建结果。所以引入 webpack-dev-server 插件来解决这个问题。
8.1 安装 webpack-dev-server
npm i webpack-dev-server -D
8.2 webpack.config.js
webpack-dev-server 插件不需要像其他插件那样去,手动引入。 如果需要修改启动的端口等等再来配置 devServer 属性。目前使用默认值即可,所以暂时不需要修改 webpack.config.js 文件。
webpack-dev-server 提供了一个简单的 web 服务器。用于快速开发。
webpack-dev-server 配置文档
8.3 运行
npx webpack-dev-server
F:\vscode\vuewebpack>npx webpack-dev-server
i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from F:\vscode\vuewebpack
i 「wdm」: Hash: c53ed17adedcaea196f6
Version: webpack 4.39.2
Time: 918ms
Built at: 2019-08-15 14:50:57
...
打开http://localhost:8080/ 即可看到运行结果。也可以使用–open 参数自动在默认浏览器中打开。
不想手动刷新,vscode 中可以试试 Live Server 插件。webpack 的 webpack-dev-server 插件可以视为 watch 模式的 webpack 和 Vscode 的 Live Server 插件的合体。
webpack-dev-server 插件生成的文件时存储在内存中的,并不会输出。所以看到到 webpack 处理后的文件,如果需要查看文件。可以在浏览器中访问 http://localhost:8080/webpack-dev-server 来查看输出到内存的文件。
引入 vue
-
文件准备
index.js 修改为
// index.js import Vue from "vue"; new Vue({ el: "#app", render: h => h() });
在作为模板 index.html 中添加 id 为 app 的 div
<!-- index.html --> ... <body> <div id="app"></div> </body> ...
执行 npm run dev 即可。
2) 使用*.vue 文件 单文件组件
2.1 添加一个 *.vue 单文件组件并在 index.js 中使用。
<!-- App.vue -->
<template>
<!-- -->
<div class="container">
</div>
</template>
<script>
export default {
data() {
return {
temp: "hello world"
};
}
};
</script>
<style scoped lang="scss"></style>
// index.js
import Vue from "vue";
import App from "./App";
new Vue({
el: "#app",
render: h => h(App)
});
2.1 vue-loader
webpack 只能处理 *.js 和 *.json 其它类型的文件都需要使用 loader。所以要使用 vue 的单文件组件首先要安装 vue-loader。
npm i vue-loader -D
安装之后,在 webapck 的配置文件 webpack.config.js 中添加匹配规则来使用 vue-loader。
// webpack.config.js
...
module: {
rules: [
{
test: /\.vue$/,
loader: "vue-loader"
}
]
},
...
2.2 vueLoaderPlugin
安装之后要在 webpack 的配置里面,添加 vueLoaderPlugin,它的作用基本可以理解为,把 vue-loader 加载进来的文件,将其中的代码分类交给不同的 loader 或者插件处理。例如 script 标签中的代码,交给 js 相关的 loader 以及插件。template 类的交给模板相关的插件。
...
const VueLoaderPlugin = require("vue-loader/lib/plugin");
...
plugins: [
...
new VueLoaderPlugin(),
...
]
...
如果不引入,运行 webpack 的时候会报如下错误
ERROR in ./src/App.vue
Module Error (from ./node_modules/vue-loader/lib/index.js):
vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.
@ ./src/index.js 2:0-24 6:17-20
从错误提示中可以看出,是缺少了 vue-loader 所对应的插件 VueLoaderPlugin 导致的。添加上就可以了。
2.3 vue-template-compiler
之前说过 webpack,只支持 JavaScript 和 json 文件。其余的文件类型都需要相应的插件来处理。vueLoaderPlugin 将 vue 的单文件组件中的代码,分类交给了相应的 webpack 处理程序。webpack 处理了 script 标签中的代码,template 标签中的代码就需要安装 vue-template-compiler 来处理了。
安装 vue-template-compiler
npm i vue-template-compiler -D
如果没有安装 vue-template-compiler 就启动 webpack 会报如下错误。
ERROR in ./src/App.vue
Module Error (from ./node_modules/vue-loader/lib/index.js):
[vue-loader] vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.
@ ./src/index.js 2:0-24 6:17-20
从错误中可以看到,必须安装 vue-template-compiler.安装 vue-template-compiler,之后再启动 webpack,就可以正常的编译了。
2.4 style 相关的 loader
vue-loader 和它的插件,将 vue 文件中的代码分类,交给了不同的处理程序。template 中的交给了,vue-template-compiler,script 中的交给了 webpack 自身的处理程序。但是没有安装和 style 相关的 loader 为什么没有报错呢,这是因为此时虽然存在 style 标签。但是标签内容是空的。而在 vue 文件组件中 style 并不是必须的。所以没有报错,如果向 style 标签中添加一些代码。再去运行 webpack 就会报错了。
将 App.vue 修改为:
<!-- App.vue -->
....
<style scoped lang="scss">
.container {
background: blue;
}
</style>
如果此时启动 webapck,报错如下
ERROR in ./src/App.vue?vue&type=style&index=0&id=7ba5bd90&scoped=true&lang=scss& (./node_modules/vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&scoped=true&lang=scss&) 19:0
Module parse failed: Unexpected token (19:0)
File was processed with these loaders:
* ./node_modules/vue-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
安装插件,
npm i style-loader css-loader -D
由于在 style 中指定了语言为 scss 所以需要再安装
npm i sass-loader node-sass -D
来处理 scss。如果指定了其它语言要安装对应的 loader 即可。
sass-loader 是将 sass 代码加载进来并调用 node-sass 进行处理,node-sass 将 scss 代码编译成 css 代码。 css-loader 是处理 css 代码中的 url、以及@import 语法等等。style-loader 则通过 style 标签将 css 插入到 DOM 中。
由上面的每个 loader 的作用判断,在 webpack 配置文件 webpack.config.js 中添加。loader 调用顺序从右至左,从下到上。
...
module:{
rules:[
...
{
test: /\.scss$/,
loaders: ["style-loader", "css-loader", "sass-loader"]
},
...
]
}
此时在启动 webpack 即可正常编译 style 标签中的内容了。
2.5 url-loader
在 css 中使用的图片的时候,需要使用 url-loader 来处理它。
例如
<!-- App.vue -->
...
<style scoped lang="scss">
.container {
height: 100px;
border: 1px solid blue;
background: url("./background.jpg");
}
</style>
安装
npm i url-loader -D
修改 webpack.config.js
// webpack.config.js
...
module{
rules;[
...
{
test: /\.jpg$/, // 其他的类型按需要添加。例如 /\.(jpg|png|gif)/ 等等
loader: "url-loader"
}
]
},
...
使用 babel
webpack 能对 JavaScript 进行处理,只是压缩等操作。如果需要使用 ES6、ES7 等新的语法,就需要使用 babel 了。babel 将其编译后使得不支持 js 新特性的环境也能使用 js 新特性了。
使用 eslint 和 prettier
eslint 和 prettier 能够对代码进行语法检测以及代码风格优化。