56-硅谷课堂2(前端基础知识)

56-硅谷课堂2(前端基础知识)-- 笔记

笔记内容来源与尚硅谷教学视频


文章目录


笔记中涉及资源:

链接:https://pan.baidu.com/s/1fNdmp8CS9gx5K9QHoItsfQ
提取码:Coke

一、前端开发和前端开发工具

①:前端开发介绍

前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被行业所认可,到了2010年,互联网开始全面进入移动时代,前端开发的工作越来越重要。

最初所有的开发工作都是由后端工程师完成的,随着业务越来越繁杂,工作量变大,于是我们将项目中的可视化部分和一部分交互功能的开发工作剥离出来,形成了前端开发。

由于互联网行业的急速发展,导致了在不同的国家,有着截然不同的分工体制。

在日本和一些人口比较稀疏的国家,例如加拿大、澳洲等,流行“Full-Stack Engineer”,也就是我们通常所说的全栈工程师。通俗点说就是一个人除了完成前端开发和后端开发工作以外,有的公司从产品设计到项目开发再到后期运维可能都是同一个人,甚至可能还要负责UI、配动画,也可以是扫地、擦窗、写文档、维修桌椅等等。

而在美国等互联网环境比较发达的国家项目开发的分工协作更为明确,整个项目开发分为前端、中间层和后端三个开发阶段,这三个阶段分别由三个或者更多的人来协同完成。

国内的大部分互联网公司只有前端工程师和后端工程师,中间层的工作有的由前端来完成,有的由后端来完成。

PRD(产品原型-产品经理) - PSD(视觉设计-UI工程师) - HTML/CSS/JavaScript(PC/移动端网页,实现网页端的视觉展示和交互-前端工程师)

②:下载和安装VS Code

1. 下载地址

https://code.visualstudio.com/

2. 插件安装

为方便后续开发,建议安装如下插件
在这里插入图片描述

3. 创建项目

vscode本身没有新建项目的选项,所以要先创建一个空的文件夹,如project_xxxx。

然后打开vscode,再在vscode里面选择 File -> Open Folder 打开文件夹,这样才可以创建项目。

4. 保存工作区

打开文件夹后,选择“文件 -> 将工作区另存为…”,为工作区文件起一个名字,存储在刚才的文件夹下即可

5. 新建文件夹和网页

6. 预览网页

以文件路径方式打开网页预览

需要安装“open in browser”插件:

文件右键 -> Open In Default Browser

以服务器方式打开网页预览

需要安装“Live Server”插件:

文件右键 -> Open with Live Server

7. 设置字体大小

左边栏Manage -> settings -> 搜索 “font” -> Font size

二、ECMAScript 6 简介

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

①:与JavaScript 的关系

一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?

要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。

因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 Jscript 和 ActionScript)

②:与 ECMAScript 2015 的关系

ECMAScript 2015(简称 ES2015)这个词,也是经常可以看到的。它与 ES6 是什么关系呢?

2011 年,ECMAScript 5.1 版发布后,就开始制定 6.0 版了。因此,ES6 这个词的原意,就是指 JavaScript 语言的下一个版本。

ES6 的第一个版本,在 2015 年 6 月发布,正式名称是《ECMAScript 2015 标准》(简称 ES2015)。

2016 年 6 月,小幅修订的《ECMAScript 2016 标准》(简称 ES2016)如期发布,这个版本可以看作是 ES6.1 版,因为两者的差异非常小,基本上是同一个标准。根据计划,2017 年 6 月发布 ES2017 标准。

因此,ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。

三、ES6基本语法

ES标准中不包含 DOM 和 BOM的定义,只涵盖基本数据类型、关键字、语句、运算符、内建对象、内建函数等通用语法。

本部分只学习前端开发中ES6的最少必要知识,方便后面项目开发中对代码的理解。

①:let声明变量

创建 let.html

// var 声明的变量没有局部作用域
// let 声明的变量  有局部作用域
{
var a = 0
let b = 1
}
console.log(a)  // 0
console.log(b)  // ReferenceError: b is not defined
// var 可以声明多次
// let 只能声明一次
var m = 1
var m = 2
let n = 3
let n = 4
console.log(m)  // 2
console.log(n)  // Identifier 'n' has already been declared

②:const声明常量(只读变量)

创建 const.html

// 1、声明之后不允许改变    
const PI = "3.1415926"
PI = 3  // TypeError: Assignment to constant variable.
// 2、一但声明必须初始化,否则会报错
const MY_AGE  // SyntaxError: Missing initializer in const declaration

③:解构赋值

创建 解构赋值.html

解构赋值是对赋值运算符的扩展。

他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

//2、对象解构
let user = {name: 'Helen', age: 18}
// 传统
let name1 = user.name
let age1 = user.age
console.log(name1, age1)
// ES6
let { name, age } =  user//注意:结构的变量必须是user中的属性
console.log(name, age)

④:模板字符串

创建 模板字符串.html

模板字符串相当于加强版的字符串,用反引号 `,除了作为普通字符串,还可以在字符串中加入变量和表达式。

// 2、字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式。
let name = "Mike"
let age = 27
let info = `My Name is ${name},I am ${age+1} years old next year.`
console.log(info)
// My Name is Mike,I am 28 years old next year.
// 3、字符串中调用函数
function f(){
    return "have fun!"
}
let string2 = `Game start,${f()}`
console.log(string2);  // Game start,have fun!

⑤:定义方法简写

创建 定义方法简写.html

// 传统
const person1 = {
    sayHi:function(){
        console.log("Hi")
    }
}
person1.sayHi();//"Hi"
// ES6
const person2 = {
    sayHi(){
        console.log("Hi")
    }
}
person2.sayHi()  //"Hi"

⑥:对象拓展运算符

创建 对象拓展运算符.html

拓展运算符(…)用于取出参数对象所有可遍历属性然后拷贝到当前对象。

// 1、拷贝对象
let person1 = {name: "Amy", age: 15}
let someone = { ...person1 }
console.log(someone)  //{name: "Amy", age: 15}

⑦:箭头函数

创建 箭头函数.html

箭头函数提供了一种更加简洁的函数书写方式。基本语法是:参数 => 函数体

// 传统
var f1 = function(a){
    return a
}
console.log(f1(1))
// ES6
var f2 = a => a
console.log(f2(1))
// 当箭头函数没有参数或者有多个参数,要用 () 括起来。
// 当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,
// 当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。
var f3 = (a,b) => {
    let result = a+b
    return result
}
console.log(f3(6,2))  // 8
// 前面代码相当于:
var f4 = (a,b) => a+b

箭头函数多用于匿名函数的定义

四、Vue

①:Vue.js 是什么

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。

Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

官方网站:https://cn.vuejs.org

②:初始Vue.js

创建 demo.html

<!-- id标识vue作用的范围 -->
<div id="app">
    <!-- {{}} 插值表达式,绑定vue中的data数据 -->
    {{ message }}
</div>
<script src="vue.min.js"></script>
<script>
    // 创建一个vue对象
    new Vue({
        el: '#app',//绑定vue作用的范围
        data: {//定义页面中显示的模型数据
            message: 'Hello Vue!'
        }
    })
</script>

这就是声明式渲染:Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统

这里的核心思想就是没有繁琐的DOM操作,例如jQuery中,我们需要先找到div节点,获取到DOM对象,然后进行一系列的节点操作

在vs code中创建代码片段:

文件 => 首选项 => 用户代码片段 => 新建全局代码片段/或文件夹代码片段:vue-html.code-snippets

注意:制作代码片段的时候,字符串中如果包含文件中复制过来的“Tab”键的空格,要换成“空格键”的空格

{
    "vue htm": {
        "scope": "html",
        "prefix": "vuehtml",
        "body": [
            "<!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>",
            "    <div id=\"app\">",
            "",
            "    </div>",
            "    <script src=\"vue.min.js\"></script>",
            "    <script>",
            "        new Vue({",
            "            el: '#app',",
            "            data: {",
            "                $1",
            "            }",
            "        })",
            "    </script>",
            "</body>",
            "",
            "</html>",
        ],
        "description": "my vue template in html"
    }
}

③:Vue指令和差值表达式

1. 基本数据渲染和指令

创建 01-基本数据渲染和指令.html

你看到的 v-bind 特性被称为指令。指令带有前缀 v-

除了使用插值表达式{{}}进行数据渲染,也可以使用 v-bind指令,它的简写的形式就是一个冒号(:)

data: {
    content: '我是标题',
    message: '页面加载于 ' + new Date().toLocaleString()
}
<!-- 如果要将模型数据绑定在html属性中,则使用 v-bind 指令
     此时title中显示的是模型数据
-->
<h1 v-bind:title="message">
    {{content}}
</h1>
<!-- v-bind 指令的简写形式: 冒号(:) -->
<h1 :title="message">
    {{content}}
</h1>
  • 完整代码
<!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>
    <div id="app">
        <h1 v-bind:title="content">
            {{content}}
        </h1>
        <br/>
        <input type="text" :value="content"/>
    </div>
    <script src="vue.min.js"></script>

    <script>
        new Vue({
            el: '#app',
            data: {
                content:'🐋🐳🐬'
            }
        })
    </script>
</body>

</html>

2. 双向数据绑定

创建 02-双向数据绑定.html

双向数据绑定和单向数据绑定:使用 v-model 进行双向数据绑定

data: {
    searchMap:{
        keyWord: '尚硅谷'
    }
}
<!-- v-bind:value只能进行单向的数据渲染 -->
<input type="text" v-bind:value="searchMap.keyWord">
<!-- v-model 可以进行双向的数据绑定  -->
<input type="text" v-model="searchMap.keyWord">
<p>您要查询的是:{{searchMap.keyWord}}</p>
  • 完整代码
<!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>
    <div id="app">
        <h1>{{message}}</h1>
       
        <input type="text"  v-model:value="message" />

    </div>
    <script src="vue.min.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                message:'🐬🐋🐳🐟🐠🐡🦐🦑🐙🦞🦀'
            }
        })
    </script>
</body>
</html>

3. 事件

创建 03-事件.html

**需求:**点击查询按钮,调用方法

增加 methods节点 并定义 search方法

data: {

},
methods:{
    search(){
        console.log('search')
    }
}

html中增加 button 和 p

使用 v-on 进行数件处理,v-on:click 表示处理鼠标点击事件,事件调用的方法定义在 vue 对象声明的 methods 节点中

<!-- v-on 指令绑定事件,click指定绑定的事件类型,事件发生时调用vue中methods节点中定义的方法 -->
<button v-on:click="search()">查询</button>

简写

<!-- v-on 指令的简写形式 @ -->
<button @click="search()">查询</button>

4. 条件渲染

创建 04-条件渲染.html

v-if:条件指令

data: {
    ok: false
}

注意:单个复选框绑定到布尔值

<input type="checkbox" v-model="ok">同意许可协议
<!-- v:if条件指令:还有v-else、v-else-if 切换开销大 -->
<h1 v-if="ok">if:Lorem ipsum dolor sit amet.</h1>
<h1 v-else>no</h1>
  • 完整代码
<body>
    <div id="app">
            <input type="checkbox" v-model="ok"/>
            <h1 v-if="ok">选中了</h1>
            <h1 v-else>没有选中</h1>
    </div>
    <script src="vue.min.js"></script>
    <script>
        Vue.config.productionTip = false
        new Vue({
            el: '#app',
            data: {
                ok:false
            }
        })
    </script>
</body>

5. 列表渲染

创建 05-列表渲染.html

v-for:列表循环指令

例1:遍历数据列表

data: {
    userList: [
        { id: 1, username: 'helen'},
        { id: 2, username: 'peter'},
        { id: 3, username: 'andy'}
    ]
}
<!-- 2、遍历数据列表 -->
<table border="1">
    <!-- <tr v-for="item in userList"></tr> -->
    <tr v-for="(item, index) in userList">
        <td>{{index}}</td>
        <td>{{item.id}}</td>
        <td>{{item.username}}</td>
    </tr>
</table>
  • 完整代码
<body>
    <div id="app">
            <table border="1" style="width: 200px;">
                <tr>
                    <td>序号</td>
                    <td>ID</td>
                    <td>姓名</td>
                    <td>年龄</td>
                </tr>
                <tr v-for="(user, index) in userList">
                    <td>{{index}}</td>
                    <td>{{user.id}}</td>
                    <td>{{user.userName}}</td>
                    <td>{{user.age}}</td>
                </tr>
            </table>
    </div>
    <script src="vue.min.js"></script>
    <script>
        Vue.config.productionTip = false
        new Vue({
            el: '#app',
            data: {
                userList:[
                    {id:10001,userName:'张三',age:21},
                    {id:10002,userName:'李四',age:22},
                    {id:10003,userName:'王五',age:23},
                    {id:10004,userName:'赵六',age:24},
                    {id:10005,userName:'吴起',age:25},
                    {id:10006,userName:'老八',age:26}
                ]
            }
        })
    </script>
</body>

④:Vue生命周期

在这里插入图片描述

创建 vue实例的生命周期.html

<h3 id="h3">{{ message }}</h3>

分析生命周期相关方法的执行时机

data: {
    message: '床前明月光'
},
created() { // 在渲染之前执行
	console.log("created....")
},
mounted() { // 在渲染之后执行
    console.log("mounted....") 
},
methods: {

}

⑤:Vue组件

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

在这里插入图片描述

1. 定义组件

var app = new Vue({
    el: '#app',
    // 定义局部组件,这里可以定义多个局部组件
    components: {
        //组件的名字
        'Navbar': {
            //组件的内容
            template: '<ul><li>首页</li><li>学员管理</li></ul>'
        }
    }
})

2. 使用组件

<div id="app">
    <Navbar></Navbar>
</div>

⑥:路由

Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。

Vue.js 路由需要载入 vue-router 库

创建 路由.html

1. 引入js

<script src="vue.min.js"></script>
<script src="vue-router.min.js"></script>

2. 编写html

<div id="app">
    <h1>Hello App!</h1>
    <p>
        <!-- 使用 router-link 组件来导航. -->
        <!-- 通过传入 `to` 属性指定链接. -->
        <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <router-link to="/">首页</router-link>
        <router-link to="/student">会员管理</router-link>
        <router-link to="/teacher">讲师管理</router-link>
    </p>
    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
</div>

3. 编写js

<script>
    // 1. 定义(路由)组件。
    // 可以从其他文件 import 进来
    const Welcome = { template: '<div>欢迎</div>' }
    const Student = { template: '<div>student list</div>' }
    const Teacher = { template: '<div>teacher list</div>' }
    // 2. 定义路由
    // 每个路由应该映射一个组件。
    const routes = [
        { path: '/', redirect: '/welcome' }, //设置默认指向的路径
        { path: '/welcome', component: Welcome },
        { path: '/student', component: Student },
        { path: '/teacher', component: Teacher }
    ]
    // 3. 创建 router 实例,然后传 `routes` 配置
    const router = new VueRouter({
        routes // (缩写)相当于 routes: routes
    })
    // 4. 创建和挂载根实例。
    // 从而让整个应用都有路由功能
    const app = new Vue({
        el: '#app',
        router
    })
    // 现在,应用已经启动了!
</script>

7、axios

axios是独立于vue的一个项目,基于promise用于浏览器和node.js的http客户端

  • 在浏览器中可以帮助我们完成 ajax请求的发送
  • 在node.js中可以向远程接口发送请求

1. 获取数据

<script src="vue.min.js"></script>
<script src="axios.min.js"></script>
var app = new Vue({
    el: '#app',
    data: {
        memberList: []//数组
    },
    created() {
        this.getList()
    },
    methods: {
        getList(id) {
            //vm = this
            axios.get('data.json')
            .then(response => {
                console.log(response)
                this.memberList = response.data.data.items
            })
            .catch(error => {
                console.log(error)
            })
        }
    }
})

控制台查看输出

2. 显示数据

<div id="app">
    <table border="1">
        <tr>
            <td>id</td>
            <td>姓名</td>
        </tr>
        <tr v-for="item in memberList">
            <td>{{item.memberId}}</td>
            <td>{{item.nickname}}</td>
        </td>
    </tr>
</table>
</div>
  • 完整代码
<body>
    <div id="app">
        <table border="1" style="width: 200px">
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年龄</td>
            </tr>
            <tr v-for="(user, index) in userList">
                <td>{{index}}</td>
                <td>{{user.name}}</td>
                <td>{{user.age}}</td>
            </tr>
        </table>
    </div>
    <script src="../vue/vue.min.js"></script>
    <script src="./axios.min.js"></script>
    <script>
        Vue.config.productionTip = false
        new Vue({
            el: '#app',
            data: {
                userList:[  ]
            },
            created(){
                this.getList()
            },
            methods: {
                getList(){
                    axios.get('data.json')
                    .then(Response => {
                        console.log(Response)
                        this.userList = Response.data.data.items
                    })
                    .catch(error => {
                        console.log(error)
                    })
                }
            } 
        })
    </script>
</body>

⑧:element-ui

element-ui 是饿了么前端出品的基于 Vue.js的 后台组件库,方便程序员进行页面快速布局和构建

官网:https://element.eleme.cn/2.0/#/zh-CN

ui相关组件我们在项目中学习

五、Node.js

①:Node.js简介

1. 什么是Node.js

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

2. Node.js有什么用

如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。

Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。

当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。

②:Node.js安装

1. 下载

官网:https://nodejs.org/en/

中文网:http://nodejs.cn/

LTS:长期支持版本

Current:最新版

2. 安装和查看版本

  • 安装
    在这里插入图片描述
  • 查看版本
node -v

在这里插入图片描述

③:简单入门

1.创建 01-控制台程序.js

console.log('Hello Node.js')

2.进入到程序所在的目录,输入

node 01-控制台程序.js

在这里插入图片描述

3.使用VsCode终端
在这里插入图片描述

4.若报错报错找不到命令(使用管理员打开VsCode)
可以先重启VsCode试试
在这里插入图片描述

浏览器的内核包括两部分核心:

  • DOM渲染引擎;
  • js解析器(js引擎)
  • js运行在浏览器中的内核中的js引擎内部

Node.js是脱离浏览器环境运行的JavaScript程序,基于V8 引擎(Chrome 的 JavaScript的引擎)

六、NPM

①:NPM简介

1. 什么是NPM

NPM全称Node Package Manager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也是Node.js的包管理工具,相当于前端的Maven 。

2. NPM工具的安装位置

我们通过npm 可以很方便地下载js库,管理前端工程。

Node.js默认安装的npm包和工具的位置:Node.js目录\node_modules

  • 在这个目录下你可以看见 npm目录,npm本身就是被NPM包管理器管理的一个工具,说明 Node.js已经集成了npm工具
#在命令提示符输入 npm -v 可查看当前npm版本
npm -v

在这里插入图片描述

②:使用npm管理项目

1. 创建文件夹npm

2. 项目初始化

#建立一个空文件夹,在命令提示符进入该文件夹  执行命令初始化
npm init
#按照提示输入相关信息,如果是用默认值则直接回车即可。
#name: 项目名称
#version: 项目版本号
#description: 项目描述
#keywords: {Array}关键词,便于用户搜索到我们的项目
#最后会生成package.json文件,这个是包的配置文件,相当于maven的pom.xml
#我们之后也可以根据需要进行修改。
#如果想直接生成 package.json 文件,那么可以使用命令
npm init -y

3. 修改npm镜像

NPM官方的管理的包都是从 http://npmjs.com下载的,但是这个网站在国内速度很慢。

这里推荐使用淘宝 NPM 镜像 http://npm.taobao.org/ ,淘宝 NPM 镜像是一个完整 npmjs.com 镜像,同步频率目前为 10分钟一次,以保证尽量与官方服务同步。

设置镜像地址:

#经过下面的配置,以后所有的 npm install 都会经过淘宝的镜像地址下载
npm config set registry https://registry.npm.taobao.org 
#查看npm配置信息
npm config list

在这里插入图片描述

4. 修改npm默认下载路径

1.查看默认安装路径
npm config ls

在这里插入图片描述

2.设置新的安装路径

npm config set prefix "D:\OOP\nodejs\node-v10.14.2-x64\file"在这里插入图片描述

5. npm install命令的使用

在这里插入图片描述

#使用 npm install 安装依赖包的最新版,
#模块安装的位置:项目目录\node_modules
#安装会自动在项目目录下添加 package-lock.json文件,这个文件帮助锁定安装包的版本
#同时package.json 文件中,依赖包会被添加到dependencies节点下,类似maven中的 <dependencies>
npm install jquery
#npm管理的项目在备份和传输的时候一般不携带node_modules文件夹
npm install #根据package.json中的配置下载依赖,初始化项目
#如果安装时想指定特定的版本
npm install jquery@2.1.x
# 局部安装
#devDependencies节点:开发时的依赖包,项目打包到生产环境的时候不包含的依赖
#使用 -D参数将依赖添加到devDependencies节点
npm install --save-dev eslint
#或
npm install -D eslint
#全局安装
#Node.js全局安装的npm包和工具的位置:用户目录\AppData\Roaming\npm\node_modules
#一些命令行工具常使用全局安装的方式
npm install -g webpack
			 --global

6. 其它命令

#更新包(更新到最新版本)
npm update 包名
#全局更新
npm update -g 包名
#卸载包
npm uninstall 包名
#全局卸载
npm uninstall -g 包名

七、模块化开发(一)

①:模块化简介

1. 模块化产生的背景

随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。

在这里插入图片描述

Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。

但是,Javascript不是一种模块化编程语言,它不支持"类"(class),包(package)等概念,更遑论"模块"(module)了。

2. 什么是模块化开发

传统非模块化开发有如下的缺点:

  • 命名冲突
  • 文件依赖

模块化规范:

  • CommonJS模块化规范
  • ES6模块化规范

②:ES5模块化

每个文件就是一个模块,有自己作用域。在一个文件里定义的变量、函数、类,都是私有的,对其他文件不可见。

1. 创建“module”文件夹

2. 导出模块

创建 common-js模块化/四则运算.js

// 定义成员:
const sum = function(a,b){
    return parseInt(a) + parseInt(b)
}
const subtract = function(a,b){
    return parseInt(a) - parseInt(b)
}

导出模块中的成员

// 导出成员:
module.exports = {
    sum: sum,
    subtract: subtract
}

简写

//简写
module.exports = {
    sum,
    subtract
}

3. 导入模块

创建 common-js模块化/引入模块.js

//引入模块,注意:当前路径必须写 ./
const m = require('./四则运算.js')
console.log(m)
const result1 = m.sum(1, 2)
const result2 = m.subtract(1, 2)
console.log(result1, result2)

4. 运行程序

node common-js模块化/引入模块.js

在这里插入图片描述

CommonJS使用 exports 和require 来导出、导入模块。

八、模块化开发(二)

①:ES6模块化写法(一)

ES6使用 export 和 import 来导出、导入模块。

1. 导出模块

创建 src/userApi.js

export function getList() {
    console.log('获取数据列表')
}
export function save() {
    console.log('保存数据')
}

2. 导入模块

创建 src/userComponent.js

//只取需要的方法即可,多个方法用逗号分隔
import { getList, save } from "./userApi.js"
getList()
save()

注意:这时程序无法运行,因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。

3. 安装Babel

Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行执行

安装命令行转码工具

Babel提供babel-cli工具,用于命令行转码。它的安装命令如下:

npm install --global babel-cli
#查看是否安装成功
babel --version

在这里插入图片描述

  • 解决方案

1. 选择Path进行编辑
在这里插入图片描述

2. 在vscode的终端中输入:npm config get prefix,会得到一个路径,这段命令也可以在cmd中输入
在这里插入图片描述

3.在编辑环境变量对话框中点击右边新建按钮,把路径放进去,点击下面的确定按钮即可
在这里插入图片描述

4.重启VsCode再次测试babel --version
在这里插入图片描述

4. 配置.babelrc

Babel的配置文件是.babelrc,存放在项目的根目录下,该文件用来设置转码规则和插件,presets字段设定转码规则,将es2015规则加入 .babelrc:

{
    "presets": ["es2015"],
    "plugins": []
}

5. 安装转码器

在项目中安装

npm install --save-dev babel-preset-es2015

6. 转码

# 整个目录转码
mkdir nodejs
# --out-dir 或 -d 参数指定输出目录
babel es6-1 -d bes6-1

在这里插入图片描述

7. 运行程序

node dist1/userComponent.js

在这里插入图片描述

②:ES6模块化写法(二)

1. 导出模块

创建 es6/userApi2.js

export default {
    getList() {
        console.log('获取数据列表2')
    },
    save() {
        console.log('保存数据2')
    }
}

2. 导入模块

创建 es6/userComponent2.js

import user from "./1.js"
user.getList()
user.save()

3. 转码

# 整个目录转码
mkdir nodejs
# --out-dir 或 -d 参数指定输出目录
babel es6-2 -d bes6-2

4. 运行程序

node .\bes6-2\2.js

在这里插入图片描述

九、搭建项目前端环境

①:vue-admin-template模板

vue-admin-template是基于vue-element-admin的一套后台管理系统基础模板(最少精简版),可作为模板进行二次开发。
在这里插入图片描述

GitHub地址:https://github.com/PanJiaChen/vue-admin-template

②:搭建环境

# 解压压缩包
# 进入目录
cd vue-admin-template-master

# 安装依赖
npm install

# 启动。执行后,浏览器自动弹出并访问http://localhost:9528/
npm run dev

1.解压到项目工作空间
在这里插入图片描述

2.进入目录 安装依赖
在这里插入图片描述

3.启动。执行后,浏览器自动弹出并访问http://localhost:9528/
npm run dev

在这里插入图片描述
在这里插入图片描述

③: 修改登录功能

1. 创建登录接口

1.获取登录请求的响应数据在这里插入图片描述

2.修改后端成功状态码为20000,失败状态码为20001
在这里插入图片描述

3.创建UserLoginController

@RestController
@RequestMapping("/admin/vod/user")
@CrossOrigin
public class UserLoginController{
    /**
     * 登录
     * @return
     */
    @PostMapping("login")
    public Result login() {
        Map<String, Object> map = new HashMap<>();
        map.put("token","admin");
        return Result.ok(map);
    }
    /**
     * 获取用户信息
     * @return
     */
    @GetMapping("info")
    public Result info() {
        Map<String, Object> map = new HashMap<>();
        map.put("roles","[admin]");
        map.put("name","admin");
        map.put("avatar","https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg");
        return Result.ok(map);
    }
    /**
     * 退出
     * @return
     */
    @PostMapping("logout")
    public Result logout(){
        return Result.ok();
    }
}

2. 修改登录前端

01. 修改接口路径

在这里插入图片描述

02. 修改js文件

在这里插入图片描述

import request from '@/utils/request'

export function login(data) {
  return request({
    url: '/admin/vod/user/login',
    method: 'post',
    data
  })
}

export function getInfo(token) {
  return request({
    url: '/admin/vod/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/admin/vod/user/logout',
    method: 'post'
  })
}

④:测试登录

1.启动后端服务,重启前端服务

2.登录(报错了。。。。)
在这里插入图片描述
在这里插入图片描述

十、跨域问题

①:什么是跨域

(1)浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。前后端分离开发中,需要考虑ajax跨域的问题。

(2)跨域的本质:浏览器对Ajax请求的一种限制

(3)这里我们可以从服务端解决这个问题

②:配置

在Controller类上添加注解

@CrossOrigin //跨域

在这里插入图片描述

③:测试登录

1.启动后端服务

2.登录(登录成功)
在这里插入图片描述

④:退出登录

  • 1.可以编写一个后端logout退出接口

  • 2.修改前端代码
    在这里插入图片描述

  • 3.修改后重启前端服务

  • 4.测试(可以成功退出)
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七@归七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值