Vue

一、ECMAScript6规范

ECMAScript就是javascript语言的规范
ES6是用得最多的javascript语言规范,被浏览器实现了

①申明变量

let和var的区别
相同点:var和let都是申明变量的
区别: let是申明块级的变量(简单理解就是在某个代码块中生效,离开该代码块就没有效果了,有点类似java中的局部变量)

var a = 2;
let b = 4;
console.debug(a,b);//打印成功
for(let i = 0;i<5;i++){
    console.debug(i);
}
//console.debug(i)打印失败

const也是用来申明变量的,使用const申明的变量就是一个常量
const修饰的变量,一旦被赋值就不能再进行更改

const c = 1;
//c = 3;不能再进行更改
console.debug(c)

②解构表达式

  • 解构数组
<script type="text/javascript">
    let arr = ["你","好","啊"];
    //console.debug(arr[0],arr[1],arr[2]);//ES5方式
    //ES6方式 解构表达式取值,解构数组
    let [a,b,c] = arr;
    console.debug(a,b,c);
    //==========================================
    let p = {
        name:"古大师",
        age:30,
        sex:true
    }
    //ES6方式 解构表达式取值,解构对象
    function show({name,age,sex}) {
        console.debug(name,age,sex);
    }
    show(p);

    let {name,age,sex} = p;
    console.debug(name,age,sex);

</script>
const c = 1;
//c = 3;不能再进行更改
console.debug(c)

②解构表达式

  • 解构数组
<script type="text/javascript">
    let arr = ["你","好","啊"];
    //console.debug(arr[0],arr[1],arr[2]);//ES5方式
    //ES6方式 解构表达式取值,解构数组
    let [a,b,c] = arr;
    console.debug(a,b,c);
</script>
  • 解构对象
<script type="text/javascript">
    let p = {
        name:"古大师",
        age:30,
        sex:true
    }
    //ES6方式 解构表达式取值,解构对象
    function show({name,age,sex}) {
        console.debug(name,age,sex);
    }
    show(p);

    let {name,age,sex} = p;
    console.debug(name,age,sex);
</script>

③函数(箭头函数)

  • 常规写法
  • 箭头函数
	箭头函数this是属于当前创建环境this是一致的
    如果箭头函数外面还有函数,那箭头函数的this是和外层函数this一致,
    如果外层没有函数,该this就是window
  • 最简写法
<script type="text/javascript">
    var p = {
        name:"古大师",
        age:44,
        show1:function (msg) {
            console.debug(msg);
            console.debug("我是以前的写法"+this.name+this.age);
        },
        show2:(msg)=>{//新的写法1  箭头函数this是属于当前创建环境this是一致的
            console.debug(msg);
            console.debug("我是箭头写法"+this.name+this.age);
            console.debug(this);//如果箭头函数外面还有函数,那箭头函数的this是和外层函数this一致,如果外层没有函数,该this就是window
        },
        show3(msg){
            console.debug(msg);
            console.debug("我是最简单的写法"+this.name+this.age);
        }
    }
    p.show1("show1");
    p.show2("show2");
    p.show3("show3");
</script>

④promise使用(了解)

<script type="text/javascript">
    const p = new Promise((resolve, reject) =>{
        const num = Math.random();
        // 随机返回成功或失败
        if (num < 0.5) {
            resolve("成功AAA!num:" + num)
        } else {
            reject("出错了BBB!num:" + num)
        }
    })//以后上面这坨代码我们都看不到的
    //以后我们的请求,有点类似于下面这种结构
    // 调用promise
    p.then(function (msg) {//如果调用成功执行该function函数中的内容
        console.log(msg);
    }).catch(function (msg) {//如果调用失败执行cat代码块中的内容提供
        console.log(msg);
    })
    /**
     * 伪代码以后发送ajax的写法:
     * this.axios.get(url,param).then(res=>{
     *
     * }).catch(res=>{
     *
     * })
     */
</script>

⑤模块化

在这里插入图片描述
在这里插入图片描述
模拟导出导入
将b中所有js导出到a.js中,到时要用a、b的js只需导入a.js即可
导出方式

  • 一次导出一个
  • 一次导出多个(导入时用{})
  • 默认导出(导入时随便取名)

a.js导出

//导出两个函数
/*
方式1
export const util = {
    show1(){
    },
    show2(){
    }
}*/
/*
方式2
const util = {
    show1(){
    },
    show2(){
    }
}
export util;
*/

//一次导出多个
var a = "hahaha";
var b = 30;
var c = {
    show3(){
    }
}
export {a,b,c};

//默认导出
export default {
    show4(){

    }
}

b.js导入

//导入util
//import util from "a";
//util.show();
//util.show2();

//一次导入多个
import {a,b,c} from "a";
console.debug(a);
console.debug(b);
c.show3();

//默认导入,名字随便取
import aaa from "a";
aaa.show4();

二、Vue认识与安装

①vue认识

vue他是一个基于双向绑定的前端框架
双向绑定:简单理解,数据一变界面就变,界面一变数据就变。

②MVC与MVVM

MVC
MVC强调责任分离思想=>各自做各自擅长之事
在这里插入图片描述
MVVM
在这里插入图片描述
在这里插入图片描述

③vue使用步骤

  • 1.导入js库
  • 准备数据
  • 准备视图
  • 渲染数据

④安装vue方案

  • 1.原生导入(在浏览器上把vue的核心js下载到本地,再本地导入即可)
  • 2.使用npm安装vue
    要使用npm安装,需要先安装npm(装nodejs就可以了,因为nodejs中自带npm工具)
    NPM相当于后台中maven,可以自己下载前端所需库文件等

npm安装vue步骤

  • 安装node,之后idea安装nodejs插件
    (命令提示符窗口 node -v和npm -v检查是否安装成功)
  • 若ideaterminal窗口不识别命令,配置terminal窗口,重启idea
    在这里插入图片描述
  • 初始化 npm init -y(类似java中pom.xml文件)
    在这里插入图片描述
  • 安装vue插件(局部安装,当前项目能用)npm install/i vue
    在这里插入图片描述

三、vue基础语法

注意事项:
胡须表达式{{xxx}},只能在挂载的标签内取值
当你导入vue核心库后,该页面就会有一个内置对象叫Vue

el属性

el:主要使用用来挂载指定的dom
el支持挂载的选择器有:id选择器,类型选择器,标签选择器

从这个列子可以看出,虽然它支持三种选择器的挂载,但是每个选择器只能挂载一个dom
所以建议大家以后挂载dom的时候统一使用id挂载

<body>
    <!--准备dom节点-->
    <div id="app" class="app">
        {{msg}}
    </div>
    <div class="app">
        {{msg}}
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data:{
            msg:"我是类型选择器"
        }
    });
</script>

②data属性

data属性是专门用来准备数据的

<body>
    <!--准备dom节点-->
    <div id="app">
        {{msg}}=={{sex}}==={{num}}==={{person}}
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
            msg:"dangdnagdang",
            sex:true,
            num:22,
            person:{
                name:"二狗强",
                age:11,
                sex:false,
                email:"sss@qq.com"
            }
        }
    })
    alert(vue.person.name);
</script>

③methods属性

当前vue实例中所有的方法都放在methods中

<body>
    <!--准备dom节点-->
    <div id="app">
        {{show("我是参数")}}<br>
        {{show2()}}
    </div>
</body>
<script type="text/javascript">
    /*
       methods:当前vue实例中所有的方法都放在methods中
    * */
    var vue = new Vue({
        el:"#app",
        data:{
            msg:"测试",
            name:"西门吹雪",
            sex:true
        },
        methods:{
            show(msg){
                alert(msg);
                return "我是方法show";
            },
            show2(){
                return "姓名:"+this.name+this.sex;
            }
        }
    });
    console.debug(vue.show("当当"));
    console.debug(vue.show2());                                         
</script>

④vue表达式

支持加减乘除和三目运算等
vue三目运算中认为false的有6个值: 0 null NaN undefined false “”
其它值全部为true

<body>
    <!--准备dom节点-->
    <div id="app">
        {{num1}}+{{num2}}={{num1+num2}}<br>
        {{num1}}-{{num2}}={{num1-num2}}<br>
        {{num1}}*{{num2}}={{num1*num2}}<br>
        {{num1}}/{{num2}}={{num1/num2}}<br>
        {{num1}}%{{num2}}={{num1%num2}}<br>
     <!--   vue三目运算中认为false的有6个值:  0 null  NaN  undefined   false  ""  其它值全部为true-->
     {{sex?"男":"女"}}
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
            num1:20,
            num2:30,
            sex:-1
        }
    });
</script>

⑤vue-操作字符串

胡须表达式 它也是可以调用对等类型的方法

<body>
    <!--准备dom节点-->
    <div id="app">
      <!--  注意:胡须表达式 它也是可以调用对等类型的方法-->
        {{str}}=={{str.length}}=={{str.substring(3,5)}}=={{str.substr(3,5)}}
        =={{str.toUpperCase()}}
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
           str:"HelloWorld"
        }
    });
</script>

四、vue指令

vue指令:vue指令就是带有v-前缀的特殊标签的属性
以下是vue常用属性:

①12_vue-v-text和v-html

  • v-text:
    在指定的标签进行设置值,如果你设置的代码有html代码,它只会当成一个纯文本进行展示=>类似于js中的innerText
  • v-html:
    在指定的标签进行设置值,如果你设置的代码有html代码,它是能被浏览器所 解析的=>类似于js中的innerHTML
<body>
    <!--准备dom节点-->
    <div id="app">
        <div v-text="text">
            AAAA
        </div>
        <div v-html="html">
            BBBB
        </div>
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
            text:"<h1>我是v-text</h1>",
            html:"<h2>我是v-html</h2>"
        }
    });
</script>

②v-for

循环迭代
在vue中循环迭代支持的元素:
整数 字符串 数组 对象

<body>
    <!--准备dom节点-->
    <div id="app">
        <ul>
            <!--如果是数字,默认从1开始取值-->
            <li v-for="(v,i) in num">{{v}}==索引{{i}}</li>
        </ul>
        <select>
            <!--如果是字符串从第一个字符开始取值-->
            <option v-for="(v,i) in str">{{v}}==索引{{i}}</option>
        </select>
        <select>
            <!--如果是数组从第一个元素开始取值-->
            <option v-for="(v,i) in hobbys">{{v}}==索引{{i}}</option>
        </select>
        <!--如果是对象,有三个参数,值,key,索引-->
        <span v-for="(v,k,a) in person">{{v}}=={{k}}=={{a}}</span>
    </div>
</body>
<script type="text/javascript">
    /*
    在vue中循环迭代支持的元素:
            整数     字符串   数组    对象
*/
    var vue = new Vue({
        el:"#app",
        data:{
           num:10,
           str:"helloworld",
           hobbys:["唱","跳","rap","篮球"],
           person:{
               name:"军军",
               email:"ss@qq.com",
               sex:true
           }
        }
    });
</script>

③v-bind

v-bind 主要用来绑定属性的

<body>
    <!--v-bind  主要用来绑定属性的-->
    <div id="app">
       <!-- 最原生的方式来获取图片-->
        <img src="image/google1.jpg" width="150px" height="150px" alt="没有该图片"/><br>
        <!--使用v-bind的方式来取图片  方式1-->
        <img v-bind:src="src" v-bind:width="width" v-bind:height="height" v-bind:alt="alt"/><br>
        <!--使用v-bind的方式来取图片(简写方式)  方式2-->
        <img :src="src" :width="width" :height="height" :alt="alt"/><br>
        <!--使用v-bind的方式来取图片(简写方式 直接绑定对象)  方式3-->
        <img v-bind="options"/><br>
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
            src:"image/google1.jpg",
            width:"150px",
            height:"150px",
            alt:"没有该图片",
            options:{
                src:"image/google2.jpg",
                width:"200px",
                height:"200px",
                alt:"没有该图片"
            }
        }
    });
</script>

④v-model

v-model 双向绑定
他支持的标签:input,select,textarea

<body>
    <div id="app">
        <input type="text" v-model="username"/>{{username}}<br>
        <input type="checkbox" v-model="hobbys" value="lq"/>篮球
        <input type="checkbox" v-model="hobbys" value="zq"/>足球
        <input type="checkbox" v-model="hobbys" value="ppq"/>乒乓球
        {{hobbys}}<br>

        <input type="radio" v-model="sex" value="1"/><input type="radio" v-model="sex" value="0"/>{{sex}}<br>

        <select v-model="country">
            <option value="China">中国</option>
            <option value="Japan">日本</option>
            <option value="America">美国</option>
        </select>
        {{country}}<br>

        <textarea cols="30" rows="5" v-model="text" ></textarea>
        {{text}}
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
           username:"古二娃",
           country:"China",
           hobbys:["lq","zq"],
           sex:1,
           text:"默认文本"
        }
    });
</script>

⑤v-if

判断指令,满足条件的标签才会显示

<body>
    <div id="app">
        <!--符合条件才会显示-->
        <span style="color: grey" v-if="age>60&&age<=100">老年人</span>
        <span style="color:yellow" v-else-if="age>30&&age<=60">中年人</span>
        <span style="color:blue" v-else-if="age>10&&age<=30">青少年</span>
        <span style="color:lawngreen" v-else>儿童</span>
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
           age:66
        }
    });
</script>

⑥v-on

v-on: 语法格式,应该写表达式或者触发的函数
简写格式,如点击事件:@click=“show(‘我是参数’)”

<body>
    <!--v-on: 语法格式,应该写表达式或者触发的函数-->
    <div id="app">
        <!--完整写法-->
        <!--表达式-->
        <input type="button" v-on:click="num++" value="点我"/>{{num}}
        <!--触发函数 简写格式-->
        <input type="button" @click="show('我是参数')" value="点我好吗"/>
        <input type="button" @mouseover="over" @mouseout="out" value="移出移进"/>
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data:{
            num:0,
            show(msg){
                alert(msg+"show time。。。");
            },
            over(){
                console.debug("我进来了");
            },
            out(){
                console.debug("我又出来了")
            }
        }
    });
</script>

⑦v-show

v-show: 控制标签属性 是style=“display: block” 还是 style=“display: none”
相当于控制标签是否显示

<body>
    <div id="app" >
        <span v-show="isShow">hello。。。world</span><br>
        <input type="button" @click="show()" value="显示或隐藏"/>
    </div>
</body>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        data:{
            isShow:true
        },
        methods:{
            show(){
                this.isShow = !this.isShow;
            }
        }
    });
</script>

五、vue组件

  • 组件可以扩展 HTML 元素,封装可重用的代码
  • 组件就是自定义标签,它内部存储了很多html代码

组件的分类:
1.全局组件(在所有vue实例中(在它所挂载元素下面有效)有效
2.局部组件(在自己vue实例中(在它所挂载元素下面有效)有效

①全局组件

<body>
    <div id="app">
        <mycomponent></mycomponent>
    </div>
    <div id="app1">
        <mycomponent></mycomponent>
    </div>
    <hr/>
</body>
<script type="text/javascript">
	//定义全局组件
    Vue.component("mycomponent",{
        template:"<h1>古大师不是傻逼</h1>"
    });
    new Vue({
        el:"#app"
    })
    new Vue({
        el:"#app1"
    })
</script>

②局部组件

<body>
    <div id="app">
        <!--局部组件 (在自己vue实例中(在它所挂载元素下面有效)有效)-->
        <mycomponent></mycomponent><!--显示-->
        <innercomponent></innercomponent><!--显示-->
        <outercomponent></outercomponent><!--显示-->
    </div>
    <div id="app1">
        <mycomponent></mycomponent><!--不显示-->
        <innercomponent></innercomponent><!--不显示-->
        <outercomponent></outercomponent><!--显示-->
    </div>   
</body>
<script type="text/javascript">
    //创建全局组件使用一个变量接受
    //使用outercomponent时就是全局组件
    let outercomponent = Vue.component("outercomponent",{
        template:"<h1>我有一头小毛驴</h1>"
    });
    //挂靠app
    new Vue({
        el:"#app",
        components:{
            mycomponent:{
                template:"<h1>我是一个局部组件</h1>"
            },
            /*当使用innercomponent时,就是局部组件*/
            innercomponent:outercomponent
        }
    });
    new Vue({
        el:"#app1"
    })
</script>

③组件注意事项

使用组件的注意事项:

  • 1.组件名问题: 如果你命名是驼峰式命名(myComponent) 那你使用组件的时候,名字必须是
    < my-component></ my-component>
    注意:取组件名字的时候统一小写就行了
<body>
    <div id="app">
        <my-component></my-component>
    </div>
</body>
<script type="text/javascript">
    //定义全局组件
    Vue.component("myComponent",{
        template:"<h1>军军</h1>"
    });
    new Vue({
        el:"#app"
    })
</script>
  • 2.定义组件模板的时候,必须有且有1个根元素,否则不能正常渲染组件
<script type="text/javascript">
    //定义全局组件
    Vue.component("myComponent",{
        template:"<div><h1>军军</h1><font color='red'>古二娃</font></div>"
    });
    new Vue({
        el:"#app"
    })
</script>

④组件定义方式

除了之前的常规方式,还有两种方式

  • template模板方式
  • script标签方式

template模板方式

<body>
    <div id="app">
       <innercomponent></innercomponent>
        <outercomponent></outercomponent>
        
        <!--把template标签直接放到挂载的dom中,它也是能直接显示的-->
        <template>
            <h1>测试</h1>
        </template>
    </div>

    <div id="app1">
        <outercomponent></outercomponent>
    </div>
    
   <!-- 定义组件的模板-->
   <template id="mycomponent">
       <form action="" method="post">
           用户名:<input type="text"/><br>
           密码:<input type="password"/><br>
           <input type="submit" value="提交">
       </form>
   </template>
</body>
<script type="text/javascript">
    //定义全局组件
    Vue.component("outercomponent",{
        template:"#mycomponent"
    })
    
    //挂载app
    new Vue({
        el:"#app",
        components:{
            innercomponent:{
                template:"#mycomponent"
            }
        }
    })

    //挂载app1
    new Vue({
        el:"#app1"
    })
</script>

script标签方式
script标签直接放到挂载的dom中它是不能被渲染的

<body>
    <div id="app">
        <outercomponent></outercomponent>
 
        <innercomponent></innercomponent>
        <!--方式3把script标签直接放到挂载的dom中它是不能被渲染的-->
        <script type="text/template">
                <h1>测试一波</h1>
        </script>
    </div>
   <!--
    方式2和方式3的区别:把template换成script 再加上type="text/template"
   -->
   <!-- script定义组件的模板方式3-->
   <script id="mytemplate" type="text/template">
       <form action="" method="">
           username:<input type="text" name="username"><br/>
           username:<input type="text" name="username"><br/>
           username:<input type="text" name="username"><br/>
           <input type="submit" value="提交">
       </form>
   </script>
</body>
<script type="text/javascript">
    //创建全局组件使用一个变量接受
    Vue.component("outercomponent", {
        template: "#mytemplate"
    });

    new Vue({
        el:"#app",
        components:{
            innercomponent:{
                template:"#mytemplate"
            }
        }
    })
</script>

⑤动态获取属性

  • 组件获取动态元素,不是找的vue中的data属性,
    而是找组件中的data属性
  • 模板中data对应的值,必须是一个函数
    并且在函数内部返回的值必须是json对象
<body>
    <div id="app">
        <outercomponent></outercomponent>
    </div>
    
    <template id="mycomponent">
        <h1>姓名:{{name}},年龄:{{age}}</h1>
    </template>
</body>
<script type="text/javascript">
    //定义全局组件
    Vue.component("outercomponent",{
        template:"#mycomponent",
        //data对应的值,必须是一个函数
        data(){
            //返回json格式数据
            return {
                name:"古老板",
                age:222
            };
        }
    })
    //挂靠app
    new Vue({
        el:"#app"
    })
</script>

六、vue路由

路由: 路由是负责将进入浏览器的请求,映射到特定的组件代码中
url地址映射到组件(html代码)
安装路由:npm install vue-router
安装成功之后,引入路由的核心库文件

使用路由步骤:

  • 1.准备组件
  • 2.映射关系(url映射组件)
  • 3.告诉vue我要使用路由
  • 4.组件渲染的位置
<body>
    <div id="app">
        <router-link to="/index">首页</router-link>
        <router-link to="/employee">员工</router-link>
        <router-link to="/product">产品</router-link>
        <!--组件渲染的位置-->
        <router-view></router-view>
    </div>
</body>
<script type="text/javascript">
    //创建组件
    var INDEX = Vue.component("index",{
        template:"<h1>首页啊</h1>"
    })
    var EMPLOYEE = Vue.component("employee",{
        template:"<h1>员工啊</h1>"
    })
    var PRODUCT = Vue.component("product",{
        template:"<h1>产品啊</h1>"
    })
    //创建路由
    var router = new VueRouter({
        //对应路径映射对应组件
        routes:[
            {path:"/index",component:INDEX},
            {path:"/employee",component:EMPLOYEE},
            {path:"/product",component:PRODUCT}
        ]
    })

    new Vue({
        el:"#app",
        //路由名称和属性名router相同,路由名称可省略 router:router=>router
        //这里是告诉vue,要使用路由
        router
    })
</script>

七、vue生命周期

  • created 可以获取vue的data和methods里的东西
  • mounted 挂载完毕,整个vue加载完毕,
    常用于加载列表、渲染, ajax请求发送到后台
<body>
    <div id="app">
    </div>
</body>
<script type="text/javascript">
   new Vue({
       el:"#app",
       data:{
           msg:"我是古老板"
       },
       methods:{
           show(){
               alert("古大哥迷上了刷抖音");
           }
       },
       //created可以获取vue的data和methods里的东西
       created(){
            alert(this.msg);
            this.show();
            this.msg = "古大哥戒烟了";
       },
       //挂载完毕,整个vue加载完毕
       mounted(){
           // 加载列表  渲染
           // ajax请求发送到后台
           alert("mounted"+this.msg);//弹出修改后的msg
       }
   })
</script>

vue生命周期图:(只关注created和mounted)
在这里插入图片描述

八、vue计算属性

  • computed属性,取值不用加括号
  • watch属性,用于随时监控值的变化
<body>
    <div id="app">
        {{birth}}==={{salary}}<br>
        <input type="text" v-model="msg"/>
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el: "#app",
        data:{
            birthday:1429032123201, // 毫秒值
            msg:""
        },
        computed:{
            birth(){
                return new Date(this.birthday).getFullYear()+"年"+new Date(this.birthday).getMonth()+"月";
            },
            salary(){
                return "工资"+30*200;
            }
        },
        watch:{
            //随时监控值的变化
            msg(newVal,oldVal){
                console.debug("新值:"+newVal);
                console.debug("老值:"+oldVal);
            }
        }
    });
</script>

九、webpack打包工具(了解)

webpack就是一个打包工具,
帮你把一些小块文件打包成一个大块文件,之后只需要导入打好包的文件。

为什么需要打包?

  • 1.将许多碎小文件打包成一个整体,减少单页面内的衍生请求次数,
    提高网站效率。
  • 2.将ES6的高级语法进行转换编译,以兼容老版本的浏览器。
  • 3.将代码打包的同时进行混淆,提高代码的安全性。

打包原理图:
在这里插入图片描述
使用webpack:
使用webpack前,需要安装服务和客户端

  • 安装webpack服务 npm install -g webpack
  • 安装webpack客户端 npm install -g webpack-cli

①打包js

ES6方式,import导入
创建js文件夹,创建a.js和b.js文件
a.js

//方式1,方式2
//import {util} from "./b";
//方式3
//import xxx from "./b";
/*var sum = xxx.sum();
alert(sum+5);*/

//导入多个
import {util1,util2} from "./b";
alert(util1.sum()+util2.sum());

b.js

//方式1
export const util1 = {
    sum(){
        return 20;
    }
}
//方式2
const util2 = {
    sum(){
        return 30;
    }
}
export {util2};

//方式3
/*export default {
    sum(){
        return 40;
    }
}*/

打包:webpack ./js/a.js -o ./dist/bundle.js
创建一个html文件引入最终打好的包文件

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="dist/bundle.js"></script>
</head>

②commonjs方式

commonjs方式,require导入
创建js文件夹,创建c.js和d.js文件
d.js

define(function () {
    return "军军";
});

c.js

let jun = require("./d");
let gu = "古老板";
console.debug(gu+jun);

打包:webpack ./js/c.js -o ./dist/bundle2.js
创建一个html文件引入最终打好的包文件

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="dist/bundle2.js"></script>
</head>

③配置打包

项目根目录创建webpack.config.js文件
webpack.config.js文件

//引入的路径模块
const path = require('path');

module.exports = {
    //申明入口
    entry: './js/c.js',
    //申明出口
    output: {
        path: path.resolve(__dirname, 'dist'),
        //最终打包的文件名称
        filename: 'bundle3.js'
    }
};

c.js

let jun = require("./d");
let gu = "古大师";
console.debug(gu+jun);

d.js

define(function () {
    return "军军军";
});

只需输入webpack命令,即可完成打包

④打包css

1.安装style和css加载器

直接打包是使用不了,css的,需要安装style加载器和css加载器
style-loader和css-loader作用是不同的。

  • css-loader: 加载.css文件
  • style-loader:使用<style>将css-loader内部样式注入到我们的HTML页面

安装样式加载器:npm install style-loader --save-dev
安装css加载器:npm install css-loader --save-dev

2.配置css

webpack.config.js文件引入下面代码

var path = require("path");
module.exports = {
    entry: './web/js/a.js',
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.css$/,     //匹配文件规则
                use: ['style-loader', 'css-loader']    //匹配后使用什么加载器进行模块加载
                // webpack use的配置,是从右到左进行加载的
            }
        ]
    }
}

3.打包

打包:webpack

⑤热更新web服务器

刚才的案例中,我们都是本地运行。webpack给我们提供了一个插件,可以帮我们运行一个web服务;

  • 安装插件:npm install webpack-dev-server --save-dev
  • 配置package.json
"scripts": {
	"dev": "webpack-dev-server --inline --progress --config ./webpack.config.js"    
}

inline:自动刷新
hot:热加载
port:指定端口
open:自动在默认浏览器打开
host:可以指定服务器的 ip,不指定则为127.0.0.1
启动服务 npm run dev/test
启动服务会报错,原因是服务与webpack版本兼容问题
配置package.json

 "devDependencies": {
    "css-loader": "^3.4.0",
    "style-loader": "^1.1.2",
    "webpack": "^3.10.0",
    "webpack-dev-server": "^2.9.7"
  }

更改版本后,再安装
npm install
重新启动服务就可以了 npm run dev/test
在这里插入图片描述
访问页面:http://localhost:8080/11_require的演示.html

十、vue脚手架

简单理解就是别人把框架给你搭建好了

  • 安装脚手架 npm install -g vue-cli
  • vue-cli快速创建webpack项目 vue init webpack
    安装路由包括之前都是yes,之后都是no
  • 启动脚手架服务 npm run dev
  • localhost:8080/ 访问

原理分析图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值