webpack(8)vue组件化开发的演变过程
2021-07-12 21:31
831 查看
前言
真实项目开发过程中,我们都是使用组件化的去开发
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() ] }
现在我们打包,就不会报错了,且访问首页有对应的数据
相关文章推荐
- Scss开发临时学习过程||webpack、npm、gulp配置
- javaWeb开发过程中常用网站收藏
- 使用SpringSide 3.1.4.3开发Web项目的全过程(下)
- 宁波中软实习第三天——IDEA+Maven开发WEB项目的配置过程
- Webpack配置开发环境总结
- 谈新手web开发的学习过程之网页设计
- webpack4.0.1_vue脚手架的项目与json-server结合,vue开发前端时用json-server模拟数据,fetch的请求代码
- 详解基于webpack和vue.js搭建开发环境
- Appcan+vue+vux+webpack开发app(原创)
- 使用webpack搭建typescript 开发环境
- Web 开发的演变:转向 Web.Next
- 浅谈web网站架构演变过程
- MyEclipse + Maven开发Web工程的详细配置过程
- 使用vue-cli+webpack搭建VUE开发环境
- MyEclipse + Maven开发Web工程的详细配置过程
- vue2.0+vue-router2.0+axios+webpack开发webapp项目(三)
- 商品WEB开发的商品定单与存储过程的应用
- webpack+react多页面开发(二)-终极架构
- MyEclipse + Maven开发Web工程的详细配置过程 .
- 使用webpack和babel搭建react开发环境