webpack(8)vue组件化开发的演变过程
前言
真实项目开发过程中,我们都是使用组件化的去开发vue
的项目,但是组件化的思想又是如何来的呢?下面就从开始讲解演变过程
演变过程1.0
一般情况下vue
都是单页面开发,所以项目中只会有一个index.html
文件,而且大多数时候这个html
中的内容都是固定死的,之前我们都是把模板代码写在html
中,现在我们把模板代码抽离出来,写在js文件中,模板代码只写入如下代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
</div>
<script src="./dist/bundle.js/"></script>
</body>
</html>
我们在js中写入模板代码如下:
import Vue from 'vue'
const app = new Vue({
el: "#app",
data: {
message: "hello",
name: "jkc"
},
methods: {
btnClick(){
console.log("test")
}
},
template: `
<div>
<h2>{{message}}</h2>
<button @click="btnClick">按钮</button>
<h2>{{name}}</h2>
</div>
`,
})
上面的template
模板中的代码vue
内部会自动替换掉html
代码中的div
标签中的内容,所以我们打包以后,页面展示的都是template
中的内容
这里我们其实还可以再进阶以下,改成以下代码
import Vue from 'vue'
const App = {
template: `
<div>
<h2>{{message}}</h2>
<button @click="btnClick">按钮</button>
<h2>{{name}}</h2>
</div>
`,
data(){
return{
message: "hello",
name: "jkc"
}
},
methods: {
btnClick(){
console.log("test")
}
},
}
const app = new Vue({
el: "#app",
template: `<App></App>`,
components: {
App
}
})
上面代码做的事情:将之前放在父组件中代码,创建一个App
对象,然后在父组件中注册,最后在模板中引用该组件,同样我们打包后在页面查看的效果与之前是一样的
演变过程2.0
上面我们发现main.js
中写的App
这个对象代码太多了,在main.js
文件中如果有多个,那样会显得很臃肿,所以我们可以把这个对象抽离出来,放在一个单独的js
文件中,我们在项目的src
文件夹中创建一个vue
文件夹,在它下面创建一个app.js
文件,将之前main.js
中的App
对象的代码复制到里面,然后导出
// app.js
export default {
template: `
<div>
<h2>{{message}}</h2>
<button @click="btnClick">按钮</button>
<h2>{{name}}</h2>
</div>
`,
data(){
return{
message: "hello",
name: "jkc"
}
},
methods: {
btnClick(){
console.log("test")
}
},
}
然后在main.js
中从app.js
中导入App
import App from './vue/app'
最后在打包,页面展示的效果还是一样,但是我们把组件抽离了出来,只是这里是js
文件的形式
演变过程3.0
上面我们已经将组建抽离出来了,但是template
和js
代码还是写在一起,此时我们就需要创建.vue
后缀的文件了,文件中会自动帮我们把template
模板代码、js
代码和css
代码分离开来,让结构更加清晰
在Vue文件夹中创建App.vue
文件,写入如下代码
<template>
<div>
<h2>{{message}}</h2>
<button @click="btnClick">按钮</button>
<h2>{{name}}</h2>
</div>
</template>
<script>
export default {
name: "App",
data(){
return{
message: "hello",
name: "jkc"
}
},
methods: {
btnClick(){
console.log("test")
}
},
}
</script>
<style scoped>
</style>
然后在main.js
文件中导入刚刚创建的Vue文件
import App from "./vue/App";
此时我们打包是会报错的,因为我们项目中用到了.vue
的组件,所以必须安装vue-loader
和vue-template-compiler
安装命令如下:
npm install -D vue-loader vue-template-compiler
这样是默认安装最新版本的"vue-loader": "^16.3.0"
和"vue-template-compiler": "^2.6.14",
大坑来袭
这里的坑,博主花了2个小时才采完,太坑了。
注意1:vue-template-compiler
的版本一定要与vue
的版一致
注意2:最新版本16.3打包会报错,我们安装时需要手动安装15.9.7
或者15.0.0
都可以,博主亲测可以
安装完成以后,我们需要在webpack
中的rules
中配置vue
{
test: /\.vue$/,
loader: 'vue-loader'
}
又因为我们的vue-loader
是15以上的版本,所以必须在你的 webpack
配置中添加 Vue Loader
的插件
const { VueLoaderPlugin } = require('vue-loader')
plugins: [
// 请确保引入这个插件!
new VueLoaderPlugin()
]
最后展示完整的webpack
配置如下
const { VueLoaderPlugin } = require('vue-loader')
const path = require('path')
module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: "dist/"
},
resolve: {
extensions: ['.json', '.js', '.vue', '.css'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
},
},
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
{
test: /\.less$/,
use: [
'vue-style-loader',
'css-loader',
'less-loader'
]
},
{
test: /\.png/,
type: 'asset'
},
{
test: /\.vue$/,
loader: 'vue-loader'
}
],
},
plugins: [
// 请确保引入这个插件!
new VueLoaderPlugin()
]
}
现在我们打包,就不会报错了,且访问首页有对应的数据
webpack(8)vue组件化开发的演变过程的更多相关文章
- 二、vue组件化开发(轻松入门vue)
轻松入门vue系列 Vue组件化开发 五.组件化开发 1. 组件注册 组件命名规范 组件注册注意事项 全局组件注册 局部组件注册 2. Vue调试工具下载 3. 组件间数据交互 父组件向子组件传值 p ...
- vue组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一些前期需要的技术储备进行简单 ...
- Vue组件化开发
Vue的组件化 组件化是Vue的精髓,Vue就是由一个一个的组件构成的.Vue的组件化设计到的内容又非常多,当在面试时,被问到:谈一下你对Vue组件化的理解.这时候又有可能无从下手,因此在这里阐释一下 ...
- day69:Vue:组件化开发&Vue-Router&Vue-client
目录 组件化开发 1.什么是组件? 2.局部组件 3.全局组件 4.父组件向子组件传值 5.子组件往父组件传值 6.平行组件传值 Vue-Router的使用 Vue自动化工具:Vue-Client 组 ...
- Vue 组件化开发
组件化开发 基本概念 在最开始的时候,已经大概的聊了聊Vue是单页面开发,用户总是在一个页面上进行操作,看到的不同内容也是由不同组件构成的. 通过用户的操作,Vue将会向用户展示某些组件,也会隐藏某些 ...
- Vue 组件化开发之插槽
插槽的作用 相信看过前一篇组件化开发后,你对组件化开发有了新的认识. 插槽是干什么的呢?它其实是配合组件一起使用的,让一个组件能够更加的灵活多变,如下图所示,你可以将组件当作一块电脑主板,将插槽当作主 ...
- 06Vue.js快速入门-Vue组件化开发
组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...
- Vue 组件化开发的思想体现
现实中的组件化思想化思想体现 标准(同一的标准) 分治(多人同时开发) 重用(重复利用) 组合(可以组合使用) 编程中的组件化思想 组件化规范:Web Components 我们希望尽可能多的重用代码 ...
- vue组件化开发-vuex状态管理库
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...
随机推荐
- 在虚拟机中安装 Ubuntu
https://www.cnblogs.com/huohu121/p/12250869.html 火狐python 博客园 首页 新随笔 联系 订阅 管理 随笔 - 54 文章 - 0 评论 - ...
- Spring AOP 框架
引言 要掌握 Spring AOP 框架,需要弄明白 AOP 的概念. AOP 概念 AOP(Aspect Oriented Programming的缩写,翻译为面向方面或面向切面编程),通过预编译方 ...
- 11.13 ethtool:查询网卡参数
ethtool命令用于查询或设置网卡参数. ethtool [devname] [root@linuxprobe ~]# ethtool eth0 Settings for eth0: Suppor ...
- 在Visual Studio 中使用git——分支管理-上(八)
在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...
- C 语言通用模板队列
前言 嵌入式开发过程中,各个模块之间,各个设备之间进行交互时,都会存在数据的输入输出,由于处理的方式不同,数据不会立即同步处理,因此通常在设计时都会设计缓冲区进行数据的处理,方式数据丢失等问题:一个项 ...
- [LeetCode] 231. 2 的幂
位运算 231. 2 的幂 ``` class Solution { public boolean isPowerOfTwo(int n) { int cnt = 0; while (n>0) ...
- Go语言web开发---Beego的cookie
1.简介 (1)Http是无状态的协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否是同一个客户端,这样的设计严重阻碍了web程序的设计. (2)Cookie是解决Http协议无 ...
- K8S集群etcd备份与恢复
参考链接: K8S集群多master:Etcd v3备份与恢复 K8S集群单master:Kubernetes Etcd 数据备份与恢复 ETCD系列之一:简介:https://developer.a ...
- Comparison of Laser SLAM and Visual SLAM
Comparison of Laser SLAM and Visual SLAM 目前,SLAM技术广泛应用于机器人.无人机.无人机.AR.VR等领域,依靠传感器可以实现机器的自主定位.测绘.路径规划 ...
- Headline 项目总结中
目录 1.项目准备 1.1 rem适配 1.2 通用样式CSS 1.3删除测试代码 1.4Git托管 2.login页面 2.1 页面布局和表单校验 2.2login页的接口抽取 2.5.loadin ...