文章目录
目录结构
简化流程
初始写法
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="./dist/build.js"></script>
</body>
</html>
main.js
new Vue({
el:'#app',
data:{
msg:'webpack 使用 vue'
}
})
简化1 配置template
template 会替换 el挂载区域
main.js
new Vue({
el:'#app',
template:`<div>{{msg}} </div>`,
data:{
msg:'webpack 使用 vue'
}
})
简化2 配置组件
main.js
const tmp = {
template:`<div>
{{name}}
使用组件分离代码
</div>`,
data:()=>({
name:'使用组件分离代码'
})
}
new Vue({
el:'#app',
template:`<tmp/>`, // `<tmp></tmp>`,
components:{tmp}
})
简化3 组件对象抽离js 使用模块化
tem.js
export default {
template:`<div>
{{name}}
使用组件分离代码
</div>`,
data:()=>({
name:'使用组件分离代码'
})
}
main.js
import tmp from 'vue/temp.js'
new Vue({
el:'#app',
template:`<tmp></tmp>`,
components:{tmp}
})
简化 4 使用vue文件 实现 结构 样式 行为分离
tem.vue
<template>
<div>
使用vue文件 实现 结构 样式 行为分离
{{msg}}
</div>
</template>
<script>
export default {
data:()=>({
msg:"使用vue文件 实现 结构 样式 行为分离"
}),
methods:{}
}
</script>
<style></style>
main.js
import App from './App.vue'
new Vue({
el:'#app',
template:`<App\>`,
components:{App}
})
已经越来越解决 vue-cli mian.js 的写法了
需要配置loader
接近脚手架mian.js写法 使用 render 渲染模版
import App from './App.vue'
new Vue({
render:h=>h(App)
}).$mount('#app')
解析编译vue文件
安装loader
// vue-loader 加载vue文件
// vue-template-compiler vue模版编译
npm i vue vue-template-compiler vue-loader -d
配置webpack webpack.config.js
// 版本较高的vue-loader 依赖插件 plugin
// 不用插件的话 可以使用 vue-loader@13.0.0 版本
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
entry:'./src/main.js',
output:{
path: path.join(__dirname,'dist'),
filename: 'build.js'
},
module:{
rules:[
{
test:/\.vue$/,
loader: 'vue-loader' // ['vue-loader'] => 'vue-loader'
}
]
},
resolve:{ // resolve: 解决
// 配置后缀名简写 导入的时候可以省略后缀名 import './a.vue' => import 'a'
extensions:['.js','.vue','.css'],
alias:{ // alias(别名)
// 默认导入的是 vue/dist/vue.runtime.js
// 用处 当导入vue的时候(import Vue from 'vue') 的时候 相当于导入 'vue/dist/vue.esm.js' esm=>ESModule
'vue$':'vue/dist/vue.esm.js'
}
},
plugins: [
new VueLoaderPlugin()
]
}
package.json
{
"name": "webpack-vue.vue",
"version": "1.0.0",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"vue": "^2.6.11",
"vue-template-compiler": "^2.6.11",
"vue-loader": "^15.9.3"
},
"devDependencies": {
"webpack": "^3.6.0"
},
"description": ""
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="./dist/build.js"></script>
</body>
</html>
main.js
import App from './App.vue'
new Vue({
render:h=>h(App)
}).$mount('#app')
App.vue
<template>
<div>
vue app 组件
</div>
</template>
<script>
export default {}
</script>
<style></style>
打包效果
npm run build