单文件组件介绍
vue中的单文件组件是以.vue扩展名结尾的文件,在这个文件中封装了html、js、css的代码,它自身是一个独立的组件,所以成为单文件组件;
vue文件结构
由于.vue封装了html、js、css的代码,所以它由以下几部分组成;
<template> html </template>
<script> js </script>
<style> css </style>
vue-loader:
如果使用.vue文件,需要使用指定加载器,否则浏览器是不能解析的。加载.vue文件的加载器是 vue-loader; 同理,一个项目中还需要html、css等,所以也要用到其对应的加载器 例:html-loader、css-loader… vue-loader是基于webpack的,要在webpack中进行配置,所以还要配置webpack;
webpack:
javaScript应用的静态模块打包器;把前端各种资源作为模块处理、使用、打包;
官网: 点击前往
单文件组件项目结构与依赖安装
创建项目结构
基于webpack的单文件组件项目基本结构
1、index.html 基本页面
2、App.vue vue根组件
3、 main.js 入口文件
4、package.json 项目配置文件
5、webpack.config.js webpack配置文件
6、 .babelrc babel配置文件,babel可以将es6转成es5
通过管理员窗口使用指令生成package.json 项目配置文件
导入依赖
由于在开发的过程中需要使用.vue文件
基于webpack的单文件组件项目需要安装以下依赖
生产环境
- vue:npm install vue -S vue核心库
开发环境
webpack
- npm i webpack -D webpack库
- npm i webpack-cli -D webpack 4.x版本以后需要依赖这个库
- npm i webpack-dev-server -D webpack服务器
Loader
- npm i vue-html-loader -D html加载器
- npm i css-loader -D css加载器
- npm i vue-style-loader -D style加载器
- npm i vue-loader -D vue加载器
template
- npm i vue-template-compiler -D 预编译模版
babel
- npm i @babel/core -D babel核心库 如果babel-loader 为8.x 那么需要使用@babel/core安装7.x的core
- npm i babel-loader -D babel编译js
- npm i babel-preset-env -D babel插件自动检测 (需要根据配置的运行环境)
安装完package.json的最终效果:
附:需要按照顺序一个一个进行安装,预防后面的依赖前面的包
配置单文件项目并运行
main.js
import Vue from 'vue'//引入内置模块 import App from './app.vue'//引入自定义模块 new Vue({ el:'#app', //使用render渲染 render:function(r){ return r(App); } })
index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> </div> </body> </html>
app.vue
<template> <h2> 欢迎来到perfect*的博客园!!!</h2> </template> <script> </script> <style> </style>
webpack.config.js
const VueLoaderPlugin=require('vue-loader/lib/plugin'); module.exports={ //1配置入口文件 entry:'./main.js', //2配置出口 output:{ path:__dirname, filename:'build.js' }, //3配置loader module:{ rules:[ { //.vue test:/.vue$/, loader:'vue-loader' }, { //js test:/.js$/, loader:'babel-loader', exclude:'/node_modules/'//排除该目录 }, { //css test:/.css$/, use:[ 'vue-style-loader', 'css-loader' ] } ] }, //4配置插件 plugins:[ new VueLoaderPlugin() ], //5设置模式 mode:'development'//开发模式 }
之后在index.html中的加入:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> </div> </body> <script src="build.js"></script><!--放在head标签之间找不到项目的挂载点--> </html>
自定义文件.babelrc
{ "presets":[ [ "env", { "moudle":false } ] ] }
package.json中加入:
{ "name": "simple-file", "version": "1.0.0", "description": "", "main": "main.js", "scripts": { "test": "echo "Error: no test specified" && exit 1", "dev":"webpack-dev-server --open --hot --port8088 --config webpack.config.js --mode development" },
在管理员窗口输入npm run dev 进行运行该项目:
最终效果:
可以在app.vue中添加js代码,在控制台打印出内容,以及修改其样式
app..vue
<template> <h2> 欢迎来到perfect*的博客园!!!</h2> </template> <script> console.log('欢迎来到perfect*的博客园') </script> <style> h2{ color: red; } </style>