美文网首页
Vue学习记录第六天

Vue学习记录第六天

作者: 大白熊_8133 | 来源:发表于2018-11-29 00:40 被阅读0次

这一部分听的我迷迷糊糊的,安装了一万个包

vue-cli

Vue项目的脚手架,帮我们生成vue的工具

npm install vue-cli -g
vue init webpack <项目名字>
cd 项目名字
npm install
npm run dev

弹出Your application is running here: http://localhost:8080,打开这个网址,Welcome to Your Vue.js App,就成功了
反正这个随便查都有,我以前安完了

模块

node.js中有个require,前端并不支持

规范:

  • node模块的规范commonjs
  • cmd seajs amd require
  • umd 为了做兼容处理的
  • esmodule
    • 如何定义模块(一个js就是一个模块)
    • 如何导出模块 (export)
    • 如何使用模块(import)

export

一个模块就是一个独立的文件,该文件内部的所有变量,外部无法获取。如果希望外部能够读取模块内的某个变量需要使用export输出该变量。

export let str1="大白熊";
export let str2="小熊";

这个js文件会将str和str2放在一个对象中导出 {str1:"大白熊",str2:"小熊"}

import

其他JS文件可以通过import命令加载定义好的文件。
变量的引入与ES6结构赋值相似,形式要与输出的相同都是对象

import {str1,str2} from "./a.js"

1. 在另一个文件中将内容解构出来才能用
2. 不能再次声明str1和str2 import拥有声明功能
3. import会被提升到顶部执行

由于如果模块中有多少对象就import出来多少实在比较麻烦,所以使用以下方法导出

import * as b from './a.js'
console.log(b.str1,b.str2);

注意要使用变量的时候不能直接使用str1和str2

或者使用default
导出时,将变量放在 export default里,引入时使用

export default {a:1,b:2};

default为对象形式

引入时

import x from './b.js'

x代表的是default后的结果

webpack

webpack是一块模块加载器兼打包工具,最终打包为静态文件

下载与配置

  1. 下载
npm init -y
npm install webpack  --save-dev

安装webpack最好不要安装全局,否则可能导致webpack的版本差异

  1. 新建一个文件webpack.config.js
  2. 在package.json中配置一个脚本,这个脚本用的命令是webpack。回去当前的node_moudules下找bin对应的webpack名字让其执行,执行的就是bin/webpack.js,webpack.js需要当前目录下有个名字叫webpack.config.js的文件。我们通过npm run build执行的目录是当前文件的目录.

总之就是这个


image.png
  1. 将之前的模块放在新建的src文件夹中


    image.png
  2. webpack.config.js
    webpack必须采用commonjs的写法

let path=require('path')
//node.js中专门处理路径用的
module.exports={
  entry:"./src/main.js",
  //打包的入口文件,webpack会自动查找相关的以来进行打包
  output:{
    filename:'bundle.js',
    //打包后的名字
    path:path.resolve('./dist')
    //解析路径,以当前路径解析一个绝对路径
    //必须是一个绝对路径
   //或者path=__dirname+'dist'
  }
}
//把main打包放在bundle.js然后再放到dist文件夹里
  1. npm run build
  2. 形成一个dist文件夹,里面有一个bundle.js文件,将commonjs文件转换为浏览器能够识别使用的js文件
  3. 多入口打包,就在entry里多写几个就好了,然后将file那么改为'[name].js'

babel转译ES6

npm install babel-core babel-loader --save-dev
  1. node_modules不是我们编的,所以不进行转译
  2. -js pipei所有的js 用babel-loader进行转译
  3. 给webpack添加新的属性
  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/}
    ]
  }
npm run build
  1. 报错 反正我报了
    Cannot find module '@babel/core'
    然后我
npm un babel-core
npm install --save-dev @babel/core
  1. 重新npm run build
  2. 完成
  3. 但是我们发现依然使用的let(ES6专用变量),需要再安一个插件
    让翻译官拥有解析ES6语法的功能,babel/preset-es2015已经不用了,我用了总是报错
npm install @babel/preset-env --save-dev
  1. 新建文件.babelrc
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry"
      }
    ]
  ]
}

10.npm run build

解析样式和图片

写了这么多,大概了解了webpack解析的基本步骤

  1. 下载需要的解析包
  2. 再webpack配置文件中告诉它,某一种文件要用哪一种方式进行解析
    3.main.js中引入

css-loader将css解析为模块,将解析内容插入style标签内(style-loader)

npm install css-loader style-loader --save-dev

webpack配置文件中添加

  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
      {test:/\.css$/,use:['style-loader','css-loader']}]}

main.js中

import './index.css'

使用的时候是从右往左的,两个loader的顺序不能改变

less,sass,stylus(css云处理语言,增加了变量,混合,函数,运算等)

  • less-loader less css-loader style-loader
  • sass-loader
  • stylus-loader
    我们用less
npm install less less-loader --save-dev

webpack配置文件中添加

  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
      {test:/\.css$/,use:['style-loader','css-loader']},
      {test:/\.less$/,use:['style-loader','css-loader','less-loader']}
    ]
  }

main.js

import './style.less'

图片解析

  • file-loader
  • url-loader 依赖于file-loader,所以改配置文件的时候只需要写url-loader即可
npm install url-loader file-loader --save-dev

webpack配置

  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
      {test:/\.css$/,use:['style-loader','css-loader']},
      //使用的时候是从右往左的,两个loader的顺序不能改变
      {test:/\.less$/,use:['style-loader','css-loader','less-loader']},
      {test:/\.(jpg|png|gif)$/,use:'url-loader'}
    ]
  }

我们会发现buddle.js中有超级长的一段,那就是图片的解析,但是这样会使得js太大,所以我们让bas24只在8K以下转化,其他情况下输出图片

  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
      {test:/\.css$/,use:['style-loader','css-loader']},
      //使用的时候是从右往左的,两个loader的顺序不能改变
      {test:/\.less$/,use:['style-loader','css-loader','less-loader']},
      {test:/\.(jpg|png|gif)$/,use:'url-loader?limit=8192'}
    ]
  }

引入图片

webpack不会进行查找,所以再main.js中写以下代码并没有作用

let img=new Image()
img.src='./2.jpg'

因为打包到后面之后,url并没有改,在dick文件夹,它并不存在
webpack引入图片需要import,或者线上路径"

import page from './2.jpg'

page就是打包后的图片路径

html插件解析

用一个插件,将我们自己的html为模板将打包后的结果,自动引入到html中产出到dist目录下

npm install html-webpack-plugin --save-dev

webpage的更改

let path=require('path')
let HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
  entry:"./src/main.js",
  output: {
    filename: 'bundle.js',
    path: path.resolve('./dist'),
  module:{
    rules:[
      {test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
      {test:/\.css$/,use:['style-loader','css-loader']},
      {test:/\.less$/,use:['style-loader','css-loader','less-loader']},
      {test:/\.(jpg|png|gif)$/,use:'url-loader?limit=8192'}
    ]
  },
  plugins:[
    [new HtmlWebpackPlugin({
      template:'./src/index.html'
    })]
]
}

1. new HtmlWebpackPlugin方法会自动产生html文件并且放入disk文件夹中
2. template是我们使用的模板
3. 产出的名字默认与模板相同,如果在模板下加filename:'login.html'就可以产出不同名字的html
4. 模板什么也不必写,插件会自动将解析的内容放在body的最下方

webpack-dev-server

这里面内置了服务,可以帮我们启动一个端口号,当代码更新时,可以自动打包(内存中打包),代码有变化就重新执行

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

然后在package.json中的脚本改为

  "scripts": {
    "build": "webpack",
    "dev":"webpack-dev-server"
  }

端口号默认为8080*

npm run dev

打开http://localhost:8080/,就是我们的网页
改变之前写下的内容,实时网页变化

在模块中用Vue

现在开始不再html中写Vue了,我好恋恋不舍啊,但是模板中最重要的就是div,通过div的id,绑定Vue实例

  1. 安装Vue
npm install vue
  1. 引入Vue
    使用import, 在main.js中
import Vue from 'vue'

- 使用了没有./的形式,所以是第三方模块
- 这样引用直接引用Vue,引用的并不是vue.js,引用的是Vue的runtime
- vue=compiler+runtime(compiler可以编译模板)

  1. 万能代码
new Vue(
{
el:"#app",
template:'<div>hello</div>
})
  1. 出问题了
    因为用的是runtime, 无法使用template,有两种解决办法
    1. 使用complier,将import部分改为
import Vue from 'vue/dist/vue.js';

但是complier有6K,浪费空间,所以可以选择使用其他的方法
2. 把模板放在render函数中

new Vue(
{
el:"#app",
    render:function(createElement){
      return createElement('h1','hello')
    }
})

render有一个参数createElement

createElement

参数

  1. 标签
  2. 数组,在这个数组中,先是第一个标签内的内容,然后重新写createElement()创建新的内容,由此可以推断这个数组就是第一个标签包含的内容
import Vue from 'vue/dist/vue.js';
//这样引用直接引用Vue,引用的并不是vue.js,引用的是Vue的runtime
//vue=compiler+runtime(compiler可以编译模板)
new Vue(
  {
    el:"#app",
    render:function(createElement){
      //返回什么创建什么,只有两个参数的情况下,第一个参数是标签,第二个是内容,
      // 如果有三个,第三个是子组件,是一个数组,然后在里面重新写createElement()
      return createElement('h1',['hello',createElement('span','大白熊')])
    }
  })

render函数的作用是将虚拟DOM渲染成真实的dom
createElement返回的是虚拟的dom

组件

现在组件是.vue格式的文件

先来复习组件都有什么

  1. template
  2. data(){}
  3. methods:{}
    4.computed:{}
    5.components:{}

.vue需要新加的几点

  1. 在模块化中,想要导出,必须要export
  2. 为每个组件自己定义一个style,利用html提供的scoped可以做到
<template>
<div>
<h1>hello</h1>
</div>
</template>
<script>
  export default{
    data() {
      return
    },
    methods:{

    },
    computed:{

    },
    components:{

    },
  }
</script>
<style scoped>
  </style>

vue-loader vue-template-compiler

  • vue-loader解析.vue文件
  • vue-template-compiler 解析vue模板
    vue会自动调用vue-compiler,用的时候只用vue-loader
    loader会迟到,但不会缺席

VueLoaderPlugin

Vue-loader在15.0.0之后有问题,需要在配置文件中添加一些东西
首先,在module.export外添加

let VueLoaderPlugin=require('vue-loader/lib/plugin')

然后在plugins部分添加

 new VueLoaderPlugin()

渲染组件

将createElement的参数改为APP

import Vue from 'vue/dist/vue.js';
import App from './App.vue';
new Vue(
  {
    el:"#app",
    render:function(createElement){
      return createElement(App)
    }
  })

相关文章

  • Vue学习记录第六天

    这一部分听的我迷迷糊糊的,安装了一万个包 vue-cli Vue项目的脚手架,帮我们生成vue的工具 弹出Your...

  • 刻意练习90-1-6

    今天是第六天,是记录90天计划的第六天,也是学习游泳的第六天。 昨天学习到蛙泳的难点,今天继续练习,教练给出的建议...

  • Vue 学习

    vue 学习记录。 参考网址 Vue:https://cn.vuejs.org/v2/guide/ Vue-rou...

  • Vue常用文档记录

    最近正在学习Vue,对Vue常用的一些api文档地址进行总结(仅为方便自己查看与学习记录) 1、Vue官方文档 ...

  • Framework7 Vue 学习记录

    记录项目过程中学习的Framework7 Vue组件。 Navbar Vue Component Navbar 是...

  • Vue学习记录

    修改npm run build的输出目录

  • vue学习记录

    vue全家桶 vue生命周期 生命周期的理解 新建项目 ①:cnpm install vue-cli -g (全...

  • Vue学习记录

    vue结构: vue常用标签 v-cloak 去除页面闪烁问题 v-text 会覆盖元素中原本的内容,但是 插值表...

  • Vue学习记录

    Here[http://cdn.hellooooo.top/image/blog/2020/09/vue/vue....

  • Vue学习记录

    下载安装node.js 修改npm镜像源npm config set registry https://regis...

网友评论

      本文标题:Vue学习记录第六天

      本文链接:https://www.haomeiwen.com/subject/rxwaqqtx.html