zoukankan      html  css  js  c++  java
  • webpack中如何使用vue

    1、安装 vue包:npm i vue -S

    2、由于在webpack中,推荐使用.vue这个组件模版文件来定义组件,不然会出现vue.js移动和一些高级语法的不支持,因此需要安装能解析这种文件的loader:npm i vue-loader vue-template-complier -D

    3、在main.js中,导入vue模块:import Vue from 'vue'

    4、定义一个.vue结尾的组件,其中组件有三部分组成:template script style

    5、使用 import login from './login.vue' 导入这个组件

    6、创建vm的实例 var vm = new Vue({el:'#app',render:c=>c(login)})

    7、在页面中创建一个id 为 app 的div 元素,作为我们vm实例要控制的区域

    源码-main.js:

     1 import $ from 'jquery'
     2 import './css/index.css'
     3 import './css/index.less'
     4 import './css/index.scss'
     5 import 'bootstrap/dist/css/bootstrap.css'
     6 //import Vue from '../node_modules/vue/dist/vue.js'
     7 import Vue from 'vue'
     8 import login from './login.vue'
     9 
    10 $(function () {
    11     $('li:odd').css('backgroundColor', 'cyan'),
    12         $('li:even').css('backgroundColor', function () {
    13             return '#' + 'F8F8F8'
    14         })
    15 })
    16 
    17 //class关键字是es6中提供的新语法,用来实现es6中面向对象编程的方式
    18 class Person {
    19     //使用static关键字,可以定义静态属性,所谓的静态属性就是可以直接通过 类名直接访问的属性
    20     //与静态属性对立的是实例属性:只能通过类的实例来访问的属性
    21     //该语法属于高级语法,es6或以上,webpack自身是处理不了的,它需要借助第三方的loader来处理:Babel,它可以将高级语法转为低级语法,在webpack中可以运行两套命令:
    22     //第一套:npm i babel-core babel-loader babel-plugin-transform-runtime -D
    23     //第二套:npm i babel-preset-env babel-preset-stage-0 -D
    24     static info = { name: 'zs', age: 20 }
    25 }
    26 
    27 //访问Person 类身上的 info静态属性
    28 console.log(Person.info)
    29 
    30 var vm = new Vue({
    31     el: '#app',
    32     data: {
    33         msg: 'Cristin'
    34     },
    35     // components:{
    36     //     login
    37     // }
    38 
    39     //在webpack中,如果想要通过vue把一个组件放到页面中展示,vm实例中的render函数可以实现,传统的components是不可以的
    40     // render:function(createElements){
    41     //     return createElements(login)
    42     // }
    43 
    44     //原始的render:function(createElements)简写
    45     render: c => c(login)
    46 })
    47 import m222, { title as xiaoxingxing, content } from "./test";
    48 console.log(m222)
    49 console.log(xiaoxingxing + "----" + content)
    50 
    51 //1、导入vue-router包
    52 import VueRouter from 'vue-router'
    53 
    54 //导入app组件
    55 import app from './App.vue'
    56 //导入Account 组件
    57 import account from './main/Account.vue'
    58 //导入 GoodsList 组件
    59 import goodslist from './main/GoodsList.vue'
    60 
    61 //2、手动安装VueRouter
    62 Vue.use(VueRouter)
    63 
    64 
    65 
    66 //3、创建路由对象
    67 var router = new VueRouter(
    68     {
    69         routes: [
    70             // account goodslist
    71             { path: '/account', component: account },
    72             { path: '/goodslist', component: goodslist }
    73         ]
    74     }
    75 )
    76 
    77 var rv = new Vue(
    78     {
    79         el: '#router',
    80         render: c => c(app),
    81         //4、路由对象挂在到rv上
    82         router
    83     }
    84 )

    源码:webpack.config.js

    const path = require('path')
    const htmlWebpackplugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const webpack = require('webpack');
    const VueLoaderPlugin = require('vue-loader/lib/plugin');
    
    //这个配置文件,其实就是一个js文件,通过Node中的模块操作向外暴露一个配置对象,然后命令行通过webpack命令直接被执行
    module.exports = {
        //配置文件中,需要手动指定入口和出口
        //入口
        entry: {
            //表示要使用的webpack打包哪个文件
            path: path.join(__dirname, './src/main.js'),
        },
        //出口
        output: {
            //指定打包好的文件输出到哪个目录里
            path: path.join(__dirname, './dist'),
    
            //指定输出文件的名称
            filename: 'bundle.js'
        },
        plugins: [
            new webpack.NamedModulesPlugin(),
            //new一个热更新的模块对象(步骤:1、devServer增加配置 2、引用webpack对象(const webpack = require('webpack') 3、插件数组中 new一个热启动对象 ))
            new webpack.HotModuleReplacementPlugin(),
            new VueLoaderPlugin(),
            new CleanWebpackPlugin(),
            new htmlWebpackplugin({
                title: 'Output Management',
                //根据模版页面来在缓存中生成想要的页面文件,指定模版文件路径
                template: path.join(__dirname, './src/index.html'),
                //生成的页面名称
                filename: 'index.html'
            })
        ],
        devServer: {
            //contentBase: './dist',
            // 设置服务器访问的基本目录
            //contentBase: path.resolve(__dirname, 'dist'), //最好设置成绝对路径
            // 设置服务器的ip地址,可以是localhost
            host: 'localhost',
            // 设置端口
            port: 8090,
            // 设置自动拉起浏览器
            open: true,
            // 设置热更新
            hot: true
        },
        devtool: 'inline-source-map',
    
        //用于配置所有的第三方模块加载器规则的,它【module】是一个对象
        module: {
            rules: [
                //配置处理.css文件的第三方loader规则
                { test: /.css$/, use: ['style-loader', 'css-loader'] },
                //配置处理.less文件的第三方loader规则,需要安装less-loaderless
                { test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
                //配置处理.scss文件的第三方loader规则,需要安装node-sasssass-loader
                { test: /.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
                //配置处理图片文件的第三方loader规则,需要安装url-loader 
                { test: /.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=99639&name=[hash:8]-[name].[ext]' },
                //处理字体文件的loader配置信息
                { test: /.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' },
                //处理class文件的loader配置信息,需要安装 babel-coreabel-loaderabel-plugin-transform-runtime
                { test: /.js$/, use: 'babel-loader', exclude: /node_modules/ },
                //处理vue文件的loader配置信息
                { test: /.vue$/, use: 'vue-loader' },
            ]
        },
        resolve: {
            //修改Vue被导入时候的包的路径
            alias: {
                //"vue$": "vue/dist/vue.js"
            }
        }
    }

    源码:login.vue

    <template>
       <div>
        <h1>自动化平台前端---{{msg}}</h1>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          msg: "Robin"
        };
      },
      methods: {
        show() {
          console.log("调用了 login.vue 中的 show 方法");
        }
      }
    };
    </script>
    
    <style>
    </style>

    源码:前端

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    
    <body>
        <ul>
            <li>这是第1个li</li>
            <li>这是第2个li</li>
            <li>这是第3个li</li>
            <li>这是第4个li</li>
            <li>这是第5个li</li>
            <li>这是第6个li</li>
            <li>这是第7个li</li>
            <li>这是第8个li</li>
            <li>这是第9个li</li>
            <li>这是第10个li</li>
        </ul>
        <div class="box"></div>
        <div class="btn-group" role="group" aria-label="...">
            <button type="button" class="btn btn-default">Left</button>
            <button type="button" class="btn btn-default">Middle</button>
            <button type="button" class="btn btn-default">Right</button>
        </div>
        <div id="app">
            <p>{{msg}}</p>
    
            <login></login>
        </div>
    
        <div id="router">
    
        </div>
    </body>
    
    </html>
  • 相关阅读:
    常见算法之10---从第一字符串中删除第二个字符串中所有的字符
    常见算法之9---折半查找(二分查找)
    常用算法之8---找到数组中只出现一次的数字
    常见算法之7---判断是否所有小字符串里的字母在大字符串里都有
    常见算法之6---判断集合S之中是否存在两个数之和为指定大小N
    常见算法之5---单例模式[java]
    常见算法之4---正整数二进制表示中的1的个数
    常见算法之3---数组中出现次数超过一半的数字
    UVa 495
    《编程之美》笔记(一)
  • 原文地址:https://www.cnblogs.com/cristin/p/9459245.html
Copyright © 2011-2022 走看看