zoukankan      html  css  js  c++  java
  • Vue(基础七)_webpack打包工具(续)

    ---恢复内容开始---

    一、前言                                                                                 

                  1、webpack-dev-server

                  2、es6的解析

                  3、单文件引入

    二、主要内容                                                                          

    1、webpack-dev-server

      (1)常用的配置参数

      --open :自动打开浏览器

      --hot: 热更新, 不在刷新的情况下替换Css样式

            --inline: 自动刷新

            --port 9999  指定端口

            --process  显示编译进度

      (2)下载

    npm install webpack-dev-server@ --save-dev

      (3)在package.json中配置

    {
      "name": "webpack-server",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "dev": "webpack-dev-server --open --hot --inline --config ./webpack.dev.config.js"  //webpack.dev.config.js这里是你当前的config文件
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "webpack": "^2.6.1",
        "webpack-dev-server": "^2.9.0"
      }
    }

    2、es6的解析

      (1)模块介绍:

      babel-core: 的作用是把js代码分析成ast(抽象语法树), 方便各个插件分析语法进行相应的处理。有些新的语法在低版本js中是不存在的,如箭头函数, rest参数, 函数参数默认值,这种语言层面的不兼容只能通过将代码转为ast, 分析其语法后转为低版本js.  abel转义器本身提供了babel转义的API 如babel.transform等, 用于对代码进行转义,像webpack的babel.loader就是调用这些API来完成转义过程的。

      babel-loader:在将es6的代码transform进行转义,就是通过babel-loader来完成

      babel-preset-env: 如果要自行配置转义过程中需要的各类插件,那比较麻烦,babel帮助我们做了一些插件集合,为preset. 我们只需要使用对应的preset就可以。

           babel-plugin-transform-runtime:   

          babel默认只转换新的js语法, 而不转换新的API , 要想使用这些新的对象和方法,必须用babel-plyfill

     

       (2)下载对应的模块

    npm install babel-core babel-loader babel-preset-env babel-plugin-transform-runtime -D

       (3)项目目录如图所示

                   

      (4)在main.js中写一写es6语法如下:

    console.log(11111)
    console.log('hello')
    
    const app = '张三';
    let a =14;
    console.log(a);
    
    var obj=()=>{
        
    }
    
    //new Promise();

      (5)package.json中的配置如下:

    {
      "name": "webpack-server",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "dev": "webpack-dev-server --open --hot --inline --config ./webpack.dev.config.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.5",
        "babel-plugin-transform-runtime": "^6.23.0",
        "babel-preset-env": "^1.7.0",
        "webpack": "^2.6.1",
        "webpack-dev-server": "^2.9.0"
      }
    }

      (6)webpack.dev.config.js

    // webpack ./main.js  ./build.js
    module.exports = {
        // 入口
        entry:{
            // 可以有多个入口,也可以有一个,如果有一个就默认从这一个入口开始分析
            "main":'./src/main.js'
        },
        output:{
            filename:'./src/build.js'
        },
        watch:true,
    
        module:{
            loaders:[{
                //处理es6, 7 8
                test:/.js$/,
                loader: 'babel-loader', 
     //exclude:/node_module/排除这里面的es6语法
                exclude:/node_modules/,
                options:{
                    presets: ['env'],//处理语法,关键字
                    plugins:['transform-runtime'], //处理函数
                }
            }]
        }
    }

      (7)运行:npm run dev.  这里可能会出现错误,往往都是版本兼容性问题,(下低版的webpack就好了)

    3、单文件引入

       (1)项目结构如图所示

             

       (2)下载包:注意这里的版本最好要一致

    npm install vue-loader@2.5.15 vue-template-compiler@2.5.17 -D
    npm install vue -S

      (3)新建的.vue文件里面包含三部分内容

    <template>
        <!--当前组件结构-->
        <div>
          {{msg}}
        </div>
    </template>
    
    
    <script>
      //当前组件的业务逻辑
      export default {
        data() {
          return {
             msg:'hello App.vue'
          }
        }
      }
    </script>
    
    <style>
       /*css样式*/
       body{
          background-color: green;
       }
    </style>

      (4)如果不配置,只会将App.vue当做一个普通文件来处理,所以我们需要进行配置

      在webpack.config.js文件中配置如下

    // webpack ./main.js  ./build.js
    module.exports = {
        // 入口
        entry:{
            // 可以有多个入口,也可以有一个,如果有一个就默认从这一个入口开始分析
            "main":'./src/main.js'
        },
        output:{
            filename:'./src/build.js'
        },
        watch:true,
    
        module:{
            loaders:[{
                //单文件引入
                test: /.vue$/,
                loader: 'vue-loader'
    
            }]
        }
    }

      (5)main.js中用下面这种方式不能渲染,会报如下错误

    build.js:3520 [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

    (found in <Root>)

    import Vue from 'vue'
    import App from './App.vue'
    
    new Vue({
        el:'#app',
        components:{
            App
        },
    
        template:'<App/>'
        //render:c=>c(App)
    })

     render函数是vue2.x版本新增的一个函数;

    使用虚拟Dom来渲染节点提升性能,因为他是基于javascript计算的

    通过使用createElement(h)来创建dom节点,createElement是render的核心方法

    其vue编译的时候会把template里面的节点解析成虚拟dom

    import Vue from 'vue'
    import App from './App.vue'
    
    new Vue({
        el:'#app',
        /*components:{
            App
        },
    
        template:'<App/>'*/
        render:c=>c(App)
    })

    三、总结                                                                                 

    ---恢复内容结束---

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:
    noip模拟赛 花
    noip模拟赛 柜(暴力)
    noip模拟赛 读
    Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题
    Java基础知识强化46:StringBuffer类之判断一个字符串是否对称案例
    Java基础知识强化45:StringBuffer类之字符串反转的案例
    Java基础知识强化44:StringBuffer类之把数组拼接成指定格式的字符串的案例
    Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
    Java基础知识强化42:StringBuffer类之StringBuffer的截取功能
    Java基础知识强化41:StringBuffer类之StringBuffer的反转功能
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10656973.html
Copyright © 2011-2022 走看看