zoukankan      html  css  js  c++  java
  • 9-webpack中配置Vue

    1、基本配置

    (1)安装Vue

    如果希望在项目中使用 Vue.js,那么必然需要对其有依赖,所以需要先进行安装:

    npm install vue@2.5.21 -S


    (2)在 main.js 中引入 vue,创建 vue 实例

    // 引用 vue
    import Vue from 'vue'
    // 创建 vue 实例
    const vue = new Vue({
      el:'#app',
      data:{
        message:'hello'
      }
    })


    (3)在 index.html 中挂载 vue 实例

    <div id="app">
      <h3>{{message}}</h3>
    </div>


    修改完成后,重新打包,运行程序, 发现打包过程没有任何错误,但是运行程序,没有出现想要的效果,

    这是因为目前我们使用的 Vue 版本为:runtime-only,这里需要修改为:runtime-compiler


    修改方法就是在 webpack.config.js 中添加如下代码:

    resolve: {
      alias: {
        'vue$': 'vue/dist/vue.esm.js'
      }
    }

    image


    修改后,再进行打包,就有效果了;


    (4)、el 和 template 的区别

    在之前的 vue 代码中,不管是想让 data 中的数据显示在界面中还是想修改自定义组件,都必须修改 index.html ,但有时候,

    我们并不希望手动的来频繁修改,这时可以定义 template 属性;


    先将 index.html 中挂载的 vue 代码进行修改(注释掉要显示的数据,只保留一个基本的 id 为 div 的元素):

    image


    在 vue 实例中定义一个 template 属性:

    image


    修改之后,再次打包运行,发现显示的是template定义的内容;


    el 和 template 模板的关系是什么呢?

    在之前的学习中,我们知道 el 用于指定 Vue 要管理的 DOM,可以帮助解析其中的指令、事件监听等,而如果 Vue实例中同时指定了 template,

    那么 template 模板的内容会替换掉挂载的对应 el 的模板;


    这样的好处是在以后的开发中,当我们再次操作 index.html 时,只需要在 template 中写入对应的标签即可;


    还可以将 template 模板中的内容进行抽离,分成 template、script、style 三部分书写,使结构变得更加清晰;


    2、Vue组件化开发

    (1)

    为了采用组件化的形式进行开发,可以将 vue 实例中的 template 和 data 抽离出来:

    const App = {
      template: `
        <div>
          <h3>template!!</h3>
        </div>
      `,
      data: {
        message: 'hello'
      }
    }
    
    // 创建 vue 实例
    new Vue({
        el: '#app',
        template: '<App/>',
        components: {
            App
        }
    })


    此时,打包运行的结果与之前一样;

    image


    但着组件的增加,main.js 文件会变得越来越臃肿,于是我们可以将这段代码单独抽取出来,放到一个 js 文件中;


    在 src 文件夹中新建一个文件夹 vue,再在 vue 文件夹中新建一个 app.js 文件:

    image


    将上面抽离出来的代码放入 app.js 中,再将其导出:

    export default {
      template: `
        <div>
          <h3>template!!</h3>
        </div>
      `,
      data: {
        message: 'hello'
      }
    }


    然后只需要在 main.js 中引用一下就行了:

    image


    此时,再打包运行,也能实现之前的效果;


    但是一个组件以一个 js 对象的形式进行组织和使用的时候是非常不方便的:

    • 编写template模块非常的麻烦
    • 如果有样式的话,不知道写在哪里比较合适


    于是,我们可以以一种全新的方式来组织一个 vue 的组件:.vue 文件


    (2)、 .vue文件封装处理

    安装 vue-loader 和 vue-template-compiler:

    #注意:vue-template-compiler的版本要和vue的版本一致,不然会报错,如果报错了,把两者的版本安装一致即可;
    npm install vue-loader@14.2.2 vue-template-compiler@2.5.21 --save-dev


    修改 webpack.config.js 的配置文件:

    {
      test: /.vue$/,
        use: ['vue-loader']
    }

    image


    在 vue 文件夹中新建 App.vue 文件:

    <template>
      <div id="app">
        <h3 class="title">{{name}}</h3>
        <p>{{message}}</p>
      </div>
    </template>
    
    <script>
      export default {
        name: 'App',
        data(){
          return{
            name:'小鸣',
            message: 'hello!'
          }
        }
      }
    </script>
    <style scoped>
      .title{
        color: pink
      }
    </style>


    打包运行,就会看到效果;


    以上我们就把内容写到了vue文件中,但是代码量多了的话,App.vue同样会越来越大,我们还可以再把一些内容抽离出来,放到其他的.vue文件中,

    然后在App.vue中导入一下,就可使用;


    比如,在vue目录下再写一个Cpn.vue文件:

    <template>
      <div>
        <h3>{{name}}</h3>
      </div>
    </template>
    
    <script>
      export default {
        name: "Cpn",
        data() {
          return{
            name:'小鸣www',
          }
        }
      }
    </script>
    
    <style scoped>
    
    </style>


    然后在App.vue中导入并注册:

    <template>
      <div id="app">
        <h3 class="title">{{name}}</h3>
        <p>{{message}}</p>
    
        <!--使用Cpn组件-->
        <Cpn/>
      </div>
    </template>
    
    <script>
      //导入Cpn
      import Cpn from "./Cpn.vue";
    
      export default {
        name: 'App',
        //注册Cpn
        components: {
          Cpn
        },
        data() {
          return{
            name:'小鸣',
            message: 'hello!'
          }
        }
      }
    </script>
    <style scoped>
      .title{
        color: pink
      }
    </style>


    重新打包,即可显示Cpn组建的内容;


    我们在App.vue中导入Cpn组件时,需要写为Cpn.vue ,如何能省略扩展名呢?

    要在webpack.config.js 中配置:
    image

  • 相关阅读:
    parted 2T以上磁盘分区和挂载
    MySQL 表空间恢复
    MySQL 绿色版安装
    EF core
    让vs自动提示没有using的类
    Android Studio 的 Gradle 面板没有 Task
    JMS微服务远程调用性能测试 vs .Net Core gRPC服务
    electron打包,使用electron-packager
    EasyNetQ(RabbitMQ)在处理消息时,如果抛出异常,继续不断发送到订阅队列,不断处理(也就是不自动确认消息已到达)
    调用系统默认浏览器,打开网页
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/13677588.html
Copyright © 2011-2022 走看看