VUE--基础语法 下

346 阅读9分钟

模块化

1.能够了解模块化的相关规范

2.了解webpack

3.了解使用Vue单文件组件

4.能够搭建Vue脚手架

5.掌握Element-UI的使用

概述

  • 传统开发模式的主要问题

    ① 命名冲突

    ② 文件依赖

  • 通过模块化解决上述问题

    模块化就是把单独的一个功能封装到一个模块(文件)中,模块之间相互隔离,但是可以通过特定的接口公开内部成员,也可以依赖别的模块

  • 模块化开发的好处:

    ​ 方便代码的重用,从而提升开发效率,并且方便后期的维护

模块化的分类

浏览器端的模块化

  • AMD(Asynchronous Module Definition,异步模块定义)

    ​ 代表产品为:Require.js

  • CMD(Common Module Definition,通用模块定义)

    ​ 代表产品为:Sea.js

服务器端的模块化

服务器端的模块化规范是使用CommonJS规范:
  1).模块分为 单文件模块 与 包 
  2).模块成员导出:module.exports 和 exports
  3).模块成员导入:require('模块标识符')
  4).一个文件就是一个模块,都拥有独立的作用域

ES6模块化

ES6模块化规范中定义:
      1).每一个js文件都是独立的模块
      2).导入模块成员使用import关键字
      3).暴露模块成员使用export关键字

小结

推荐使用ES6模块化,因为AMD,CMD局限使用与浏览器端,而CommonJS在服务器端使用。 ES6模块化是浏览器端服务器端通用的规范.

Node.jS中使用ES6模块化

Node.js通过babel插件将高级的有兼容性的js代码转化为低级的没有兼容性的js代码

安装和使用

A.安装babel

1.)打开终端,输入命令:

npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node

2.)安装完毕之后,再次输入命令安装:

npm install --save @babel/polyfill

B.创建babel.config.js

3.)在项目目录中创建babel.config.js文件。
4.)编辑js文件中的代码如下:
    const presets = [
        ["@babel/env",{
            targets:{
                edge:"17",
                firefox:"60",
                chrome:"67",
                safari:"11.1"
            }
        }]
    ]
    //暴露
    module.exports = { presets }

C.创建index.js文件

5.)在项目目录中创建index.js文件作为入口文件
在index.js中输入需要执行的js代码,例如:
    console.log("ok");

D.使用npx执行文件

6.)打开终端,输入命令:npx babel-node ./index.js  执行代码  
7.)babel已经配置完成

ES6模块化基本语法

设置默认导入/导出

A.默认导出

export default {
    成员A,
    成员B,
    .......
},如下:
let num = 100;
export default{
    num
}

B.默认导入

import 接收名称 from "模块标识符",如下:
import test from "./test.js"

注意:在一个模块中,只允许使用export default向外默认暴露一次成员,千万不要写多个export default。 如果在一个模块中没有向外暴露成员,其他模块引入该模块时将会得到一个空对象

设置按需导入/导出

A.按需导出

export let num = 998;
export let myName = "jack";
export function fn = function(){ console.log("fn") }

B.按需导入

import { num,fn as printFn ,myName } from "./test.js"
//同时导入默认导出的成员以及按需导入的成员
import test,{ num,fn as printFn ,myName } from "./test.js" 

#   as 是起别名

注意:一个模块中既可以按需导入也可以默认导入,一个模块中既可以按需导出也可以默认导出

直接导入并执行代码

我们只想单纯执行某个模块中的代码,并不需要得到模块中向外暴露的成员,此时,可以直接导入并执行模块代码。

test2.js 并没有导出任何成员,所以导入时不需要from,直接import导出,执行test2中的代码

import "./test2.js";

webpack

概念

webpack是一个流行的前端项目构建工具,可以解决目前web开发的困境。

  • 文件依赖关系错综复杂
  • 静态资源请求效率低
  • 模块化支持不友好
  • 浏览器对高级 Javascript 特性兼容程度较低

webpack的优点

  • 提供了模块化支持
  • 代码压缩混淆
  • 解决js兼容问题
  • 性能优化等特性
  • 提高了开发效率和项目的可维护性

基本使用

A.创建项目目录并初始化

创建项目,并打开项目所在目录的终端,
输入命令:
    npm init -y,
初始化包管理配置文件 package.json

B.创建首页及js文件

新建src源代码目录
新建src-> index.html 首页
初始化页面结构:
   在页面中摆放一个ul,ul里面放置几个li
在项目目录中创建js文件夹,并在文件夹中创建index.js文件

C.安装jQuery

打开项目目录终端,输入命令:
npm install jQuery -S

D.导入jQuery

打开src->index.js文件,编写代码导入jQuery并实现功能:
import $ from "jquery";
$(function(){
    $("li:odd").css("background","cyan");
    $("li:even").css("background","pink");
})

注意:此时项目运行会有错误,因为import $ from "jquery";这句代码属于ES6的新语法代码,在浏览器中可能会存在兼容性问题 所以我们需要webpack来帮助我们解决这个问题。

E.安装配置webpack

  • 1). 打开项目目录终端,输入命令:

npm install webpack webpack-cli -D 安装webpack相关的包

  • 2).然后在项目根目录中,创建一个 webpack.config.js 的webpack配置文件
  • 3).在 webpack.config.js 文件中初始化如下webpack配置 :
module.exports = {

    mode:"development"//mode用来指定构建模式
    //可以设置为development(开发模式),production(发布模式)

}

补充: mode设置的是项目的编译模式。

a. 如果设置为development则表示项目处于开发阶段,不会进行压缩和混淆,打包速度会快一些

b.如果设置为production则表示项目处于上线发布阶段,会进行压缩和混淆,打包速度会慢一些

  • 4).修改项目中的package.json文件添加运行脚本dev,如下:
"scripts":{
    "dev":"webpack"//scripts节点下的脚本,可以通过 npm run 运行
}
  • 6).运行dev命令启动webpack进行项目打包,并在页面中引入项目打包生成的js文件

    • 打开项目目录终端,输入命令:

    npm run dev ->生成dist目录

    • 等待webpack打包完毕之后,找到默认的dist路径中生成的main.js文件,将其引入到index.html页面中。

      <script src="--/dist/main.js"></script>

配置打包的入口/出口

在webpack 4.x中,默认约定:

  • 打包入口js文件为 src -> index.js
  • 打包的输出文件为 dist -> main.js

修改打包的入口与出口:

可以在 webpack.config.js 中设置入口/出口的js文件,如下:

const path = require("path");//导入nodejs中专门操作路径的模块

module.exports = {

    mode:"development",

    //设置入口文件路径

    entry: path.join(__dirname,"./src/xx.js"),

    //设置出口文件

    output:{

        //设置路径
        path:path.join(__dirname,"./dist"),

        //设置输出文件名

        filename:"res.js"

    }
}

配置webpack的自动打包

默认情况下,我们更改入口js文件的代码,需要重新运行命令打包webpack,才能生成出口的js文件 那么每次都要重新执行命令打包,这是一个非常繁琐的事情,那么,自动打包可以解决这样繁琐的操作。

仅限入口js,不包括其他js配置文件的更改webpack.config.js

实现自动打包功能的步骤如下:

A.安装自动打包功能的包:webpack-dev-server

    npm install webpack-dev-server -D

 B.修改package.json中的dev指令如下:
 
   "scripts":{

            "dev":"webpack-dev-server"

    }

 C.将引入的js文件路径更改为:<script src="/bundle.js"></script>

 D.运行npm run dev 进行打包

 E.打开网址查看效果:http://localhost:8080

注意:

  • webpack-dev-server 会启动一个实时打包的 http 服务器

  • webpack-dev-server自动打包的输出文件,默认放到了服务器的根目录中,而且是虚拟的,看不见

    所以使用时用“/bunder.js”,使用/

补充: 在自动打包完毕之后,默认打开服务器网页,实现方式就是打开package.json文件,修改dev命令: "dev": "webpack-dev-server --open --host 127.0.0.1 --port 9999"

配置html-webpack-plugin 生成预览页面

使用html-webpack-plugin 可以生成一个预览页面。 因为当我们访问默认的 http://localhost:8080/的时候,看到的是一些文件和文件夹,想要查看我们的页面还需要点击文件夹点击文件才能查看,那么我们希望默认就能看到一个页面,而不是看到文件夹或者目录。 实现默认预览页面功能的步骤如下:


 A.安装默认预览功能的包:html-webpack-plugin
     npm install html-webpack-plugin -D
 B.修改webpack.config.js文件,如下:
        //导入包
     const HtmlWebpackPlugin = require("html-webpack-plugin");
        //创建对象
    const htmlPlugin = new HtmlWebpackPlugin({
            //设置生成预览页面的模板文件
            template:"./src/index.html",
            //设置生成的预览页面名称
            filename:"index.html"
        })
 C.继续修改webpack.config.js文件,添加plugins信息:
        module.exports = {
            ......
            plugins:[ htmlPlugin ]
        }

配置自动打包相关参数

打包完成后自动打开浏览器页面

配置 IP 地址

配置端口

 // package.json中的配置
 // --open 打包完成后自动打开浏览器页面
 // --host 配置 IP 地址
 // --port 配置端口
 "scripts": {
 "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
 },

webpack中的加载器

通过loader打包非js模块

默认情况下,webpack只能打包js文件,如果想要打包非js文件,需要调用loader加载器才能打包,否则会报错

loader 加载器可以协助 webpack 打包处理特定的文件模块

loader加载器的种类

  • less-loader 可以打包处理 .less 相关的文件
  • sass-loader 可以打包处理 .scss 相关的文件
  • url-loader 可以打包处理 css 中与 url 路径相关的文件
  • babel-loader:打包处理高级js语法的加载器
  • postcss-loader :打包处理css兼容性前缀
  • css-loader,style-loader:打包处理css文件

注意:指定多个loader时的顺序是固定的,而调用loader的顺序是从后向前进行调用

loader的调用过程

基本使用

更改完配置文件记得停止服务器,重启npm run dev

打包处理CSS文件

安装style-loader,css-loader来处理样式文件 1). 安装包 npm install style-loader css-loader -D 2).配置规则:

​ 更改webpack.config.js的module中的rules数组

module.exports = {
        ......
        plugins:[ htmlPlugin ],
        module : {
            rules:[
                {
                    //test表示需要匹配的文件类型,支持正则,$是以...结尾的文件
                    test:/\.css$/,

                    //use表示该文件类型需要调用的loader

                    use:['style-loader','css-loader']
    #注意:
      1.use数组中指定的loader顺序是固定的
      2.多个loader的调用顺序是:从后往前调用,先css-loader->style-oader

                }
            ]
        }
    }
    ---------------index.js引入----
import './css/1.css'
    

打包处理less文件

安装less,less-loader处理less文件 1).安装包 npm install less-loader less -D 2).配置规则:

​ 更改webpack.config.js的module中的rules数组

module.exports = {

        ......

        plugins:[ htmlPlugin ],

        module : {

            rules:[

                {
                    //test设置需要匹配的文件类型,支持正则
                    test:/\.css$/,
                    //use表示该文件类型需要调用的loader
                  use:['style-loader','css-loader']

                },
---------------新增一个rules规则-----------
                {
                    test:/\.less$/,
                    use:['style-loader','css-loader','less-loader']
                }
            ]
        }
    }
    
    
--------------index.js引入----
import './css/1.less'

打包处理scss文件

安装sass-loader,node-sass 注意这里是sass不是scss

1).安装包 npm install sass-loader node-sass -D

2).配置规则:

​ 更改webpack.config.js的module中的rules数组

 module.exports = {
        ......
        plugins:[ htmlPlugin ],

        module : {

            rules:[

                {
                    //test设置需要匹配的文件类型,支持正则
                    test:/\.css$/,
                    //use表示该文件类型需要调用的loader
                    use:['style-loader','css-loader']
                },

                {
                    test:/\.less$/,
                    use:['style-loader','css-loader','less-loader']

                },
----------------------配置scss规则---------
                {

                    test:/\.scss$/,

                    use:['style-loader','css-loader','sass-loader']

                }
            ]
        }
    }
--------------index.js引入----------------
import './css/1.scss'

安装sass-loader失败时,大部分情况是因为网络原因,详情参考: segmentfault.com/a/119000001…

自动添加css的兼容性前缀(-ie-,-webkit-)

安装post-css自动添加css的兼容性前缀(-ie-,-webkit-)

1).安装包 npm install postcss-loader autoprefixer -D 2).在项目根目录创建并配置postcss.config.js文件

const autoprefixer = require("autoprefixer");

module.exports = {

    plugins:[ autoprefixer ]//挂载插件

}

3).配置规则:

更改webpack.config.js->module->rules数组

module.exports = {

    ......

    plugins:[ htmlPlugin ],

    module : {

        rules:[

            {
-----------修改css的loader规则------------
                //test设置需要匹配的文件类型,支持正则
                test:/\.css$/,

                //use表示该文件类型需要调用的loader
                use:['style-loader','css-loader','postcss-loader']

            },
  .......
    }
}

打包样式表中的图片以及字体文件

在样式表css中有时候会设置背景图片和设置字体文件,一样需要loader进行处理 使用url-loader和file-loader来处理打包图片文件以及字体文件 1).安装包 npm install url-loader file-loader -D 2).配置规则:

更改webpack.config.js的module中的rules数组

module.exports = {

    ......

    plugins:[ htmlPlugin ],

    module : {

        rules:[ 
    ......

   {               		        			      test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
 
                //limit用来设置字节数,只有小于limit值的图片,才会转换为base64图片
    use:"url-loader?limit=16940"
            }
        ]
    }
}

打包js文件中的高级语法

在编写js的时候,有时候我们会使用高版本的js语法 有可能这些高版本的语法不被兼容,我们需要将之打包为兼容性的js代码

我们需要安装babel系列的包

1).安装babel转换器 npm install babel-loader @babel/core @babel/runtime -D

2).安装babel语法插件包 npm install @babel/preset-env @babel/plugin-transform-runtime @ba bel/plugin-proposal-class-properties -D

3).在项目根目录创建并配置babel.config.js文件

module.exports = {
    presets:["@babel/preset-env"],
    plugins:[ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties" ]
}

4).配置规则:

更改webpack.config.js的module中的rules数组

module.exports = {

    ......

    plugins:[ htmlPlugin ],

    module : {

        rules:[

    ......
    
    ,{

                test:/.js$/,

                use:"babel-loader",

                //exclude为排除项,意思是不要处理node_modules中的js文件

                exclude:/node_modules/
            }
        ]
    }
}

Vue单文件组件

传统Vue组件

缺陷:

  • 全局定义的组件不能重名,
  • 字符串模板缺乏语法高亮,
  • 不支持css(当html和js组件化时,css没有参与其中)
  • 没有构建步骤限制,只能使用H5和ES5,不能使用预处理器(babel)

解决方案

使用Vue单文件组件,每个单文件组件的后缀名都是.vue

Vue单文件组件(★★★)

组成结构

每一个Vue单文件组件都由三部分组成

  • template组件组成的模板区域
  • script组成的业务逻辑区域
  • style样式区域 style 尽量加上scoped 指令避免组件之间样式冲突

示例模板

xxx.vue

<template>
  <!-- 这里用于定义Vue组件的模板内容 -->
    组件代码区域

</template>

<script>
	// 这里用于定义Vue组件的业务逻辑
 	export default {
 		data: () { return {} }, // 私有数据
 		methods: {} // 处理函数
 		// ... 其它业务逻辑
 } 
    js代码区域

</script>

<style scoped>
  /* 这里用于定义组件的样式 */
    样式代码区域

</style>

app.vue

<template>
  <div>
    <h1>这是 App 根组件</h1>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {}
};
</script>

<style scoped>
h1 {
  color: red;
}
</style>

webpack中loader加载器配置vue组件

安装Vetur插件可以使得.vue文件中的代码高亮

配置.vue文件的加载器
A.安装vue组件的加载器 npm install vue-loader vue-template-compiler -D
B.配置规则: 更改webpack.con fig.js的module中的rules数组

   1) const VueLoaderPlugin = require("vue-loader/lib/plugin");

    2)const vuePlugin = new VueLoaderPlugin();

    module.exports = {

        ......

       plugins:[ htmlPlugin, vuePlugin  ],
        //或者 可以省略第二步
    /*plugins:[ htmlPlugin, 
        new VueLoaderPlugin()
        ],*/
        module : {

            rules:[

                ...//其他规则
         3)添加rules规则
                { 

                    test:/.vue$/,

                    loader:"vue-loader",          
                }
            ]
        }
    }

在webpack项目中使用vue

上一节我们安装处理了vue单文件组件的加载器,想要让vue单文件组件能够使用,我们必须要安装vue 并使用vue来引用vue单文件组件。

A.安装Vue npm install vue -S
B.在src-> index.js 入口文件中引入vue:

import Vue from 'vue'

记得导入单文件组件:import App from './components/App.vue'

C.创建Vue实例对象并指定el,最后使用render函数渲染单文件组件

----------------index.js--------- 
const vm = new Vue({
     //指定vm实例想要控制的页面区域
        el:"#first",
     // 通过render函数,把指定的组件渲染到el区域中
        render:h=>h(App)//app.vue文件导入的示例
	#今后webpack vue 组件的渲染都使用render函数
    })
  
  ------index.html文件---------------
    <div id="app"></div>
    //将来vue组件控制的区域
         

使用webpack打包发布项目

在项目上线之前,我们需要将整个项目打包并发布。

  • 配置package.json
// 在package.json文件中配置 webpack 打包命令

"scripts":{
    ......
    
		//用于开发调试的命令
        "dev":"webpack-dev-server",
		//用于打包的命令  该命令默认加载项目根目录中的 webpack.config.js 配置文件 
        "build":"webpack -p"

    }

  • 在项目打包之前,可以将dist目录删除,生成全新的dist目录

Vue脚手架cli

Vue脚手架用于快速生成Vue项目基础的架构。

官网

cli.vuejs.org/zh/

使用步骤

安装

安装3.x版本的Vue脚手架: npm install -g @vue/cli

cmd(管理员) ->直接输入

创建vue项目

基于3.x版本的脚手架创建Vue项目的三种方式(前两种常用)

  • 1.使用交互式命令创建Vue项目

    • 命令:vue create my-proj ect->cmd ->直接输入,或者cd到文件要安装的位置

    • 进入交互式面板

      • 选择Manually select features(选择特性以创建项目
      • 勾选特性可以用空格进行勾选。 router +babel+linter/formatter
      • 是否选用历史模式的路由:n
      • ESLint选择:ESLint + Standard config
      • 何时进行ESLint语法校验:Lint on save
      • babel,postcss等配置文件如何放置:In dedicated config files(单独使用文件进行配置)
      • 是否保存为模板:
      • 使用哪个工具安装包:npm
    • 运行项目:

      cd vue_xxxxxx   
      npm run serve
      
  • 2.基于ui界面创建Vue项目(推荐)

    • 命令:vue ui cmd中直接输入

    • 在自动打开的创建项目网页中配置项目信息。

      • 选择目录

      • ​ 项目名

      • 填写Git 初始化提交信息

      • 第一次用手动

        bable +router+linter/formatter+使用配置文件

      • ESLink+standard config

      • link on save

      • 是否保存预设,后期可以一键生成

  • 3.基于2.x的旧模板,创建旧版Vue项目(了解)

    cmd->

    npm install -g @vue/cli-init
    vue init webpack my-project

运行项目

npm run sever

Vue脚手架生成的项目结构分析

  • node_modules:依赖包目录
  • public:静态资源目录
  • src:源码目录
  • src/assets:资源目录
  • src/components:组件目录
  • src/views:视图组件目录
  • src/App.vue:根组件
  • src/main.js:入口js
  • src/router.js:路由js
  • babel.config.js: babel配置文件
  • .eslintrc.js:

Vue脚手架的自定义配置

  • 第一种方式:

通过 package.json 进行配置 [不推荐使用]

新增:  "vue":{
        	"devServer":{
          	  "port":"9990",//端口号
           	  "open":true //自动打开浏览器
            }
    	}
  • 第二种方式:(★★★推荐)

通过单独的配置文件进行配置,根目录中创建vue.config.js

比较单一,方便维护

 module.exports = {

        devServer:{

            port:8888,

            open:true
        }
    }
---------停止服务 重新编译运行 npm run server----

Element-UI

Element-UI:一套为开发者、设计师、产品经理准备的基于vue 2.0的桌面端组件库

官网

element-cn.eleme.io/#/zh-CN

基本使用

1.基于命令行方式手动安装

  • 安装依赖包:

npm install element-ui -S

  • 导入Element-UI相关资源:

    main.js

//导入组件库
import ElementUI from "element-ui";
//导入组件相关样式
import "element-ui/lib/theme-chalk/index.css";
//配置Vue插件
Vue.use(ElementUI)

2.基于图形化界面自动安装

  • cmd 运行vue ui 命令,打开图形化界面
  • 通过 Vue 项目管理器,配置具体项目
  • 点击 插件 -> 添加插件,进入插件查询面板
  • 搜索 vue-cli-plugin-element
    • import on demand ->zh-CN(默认) -> 安装
      • 插件按需导入,可以减少打包后项目的体积

根据VUE全家桶整理的笔记,如有侵权请告知