webpack 配置vue优化解析 解析编译vue文件

16 篇文章 1 订阅

目录结构

在这里插入图片描述

简化流程

初始写法

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

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值