大前端技能讲解:NodeJS、Npm、Es6、Webpack

news2025/2/25 8:47:48

文章目录

  • 1. 基础概述
  • 2. Nodejs
    • 2.1 Nodejs 了解和快速入门
    • 2.2 Nodejs 实现 Httpserver 服务(实现请求响应)
    • 2.3 Nodejs 操作 MySQL 数据库
  • 3. ES6
    • 3.1 ES6 的概述
    • 3.2 ES6 的语法:let 和 const 命令
    • 3.3 ES6 的语法:模板字符串
    • 3.4 ES6 的语法:函数默认参数与箭头函数
    • 3.5 ES6 的语法:对象的初始化的简写
    • 3.6 ES6 的语法:对象解构
    • 3.7 ES6 的语法:传播操作符
    • 3.8 ES6 的语法:数组 map 和 reduce 方法使用(了解)
      • map
      • reduce
    • Nodejs 小结
  • 4. NPM 包管理器
    • 4.1 简介
      • 1. 用来快速构建 nodejs 工程
      • 2. 快速安装和依赖第三方模块
  • 7. webpack
    • 7.1 什么是 webpack
    • 7.2 webpack 安装
    • 7.3 初始化项目
    • 7.4 JS 打包

视频链接
文档链接

1. 基础概述

  1. 前端开发和前端开发工具
  2. Nodejs 安装及快速入门
  3. ES6 新语法
  4. Npm 包管理器
  5. Babel 的安装作用
  6. 模块化管理
  7. Webpack 打包和编译
  8. 如何快速构建一个 nodejs 项目 vue-admin-element
  9. 如何快速构建一个 nodejs 项目 antd

2. Nodejs

2.1 Nodejs 了解和快速入门

请添加图片描述
介绍:
Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。

简单说 Node.js 就是运行在服务端的 JavaScript,Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台,底层架构是:JavaScript,文件后缀.js

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

第一个 Node.js 程序
创建一个文件夹 Nodejs
以管理员身份打开 VS code
用 VS code 打开该文件夹
创建 helloworld.js
写代码:

//类似于:System.out.println("hello world!");
console.log("hello world")

运行
(自动补全 Tab键)
在这里插入图片描述

2.2 Nodejs 实现 Httpserver 服务(实现请求响应)

  1. 创建 httpserver.js
// 导入模块是 require 就类似于 import java.io
const http = require('http');

//1. 创建一个 httpserver 服务
http.createServer(function(request, response){
    // 浏览器怎么认识 hello server!!!
    //告诉浏览器以 text-plain 的方式去解析 hello server!!! 这段数据。
    response.writeHead(200,{'Content-type':'text/plain'});
    // 给浏览器输出内容
    response.end("hello server!!!");
}).listen(8888);
console.log("你启动的服务是:http://localhost:8888 已启动成功")
//2. 监听一个端口8888
//3. 启动运行服务 node httpserver.js
//4. 在浏览器访问 http://localhost:8888
  1. 运行服务器程序
    node httpserver.js
    在这里插入图片描述
  2. 服务器启动成功后,在浏览器中输入:http://localhost:8888/ 查看 webserver 成功运行,并输出 html 页面
    在这里插入图片描述
  3. 停止服务:ctrl + c

2.3 Nodejs 操作 MySQL 数据库

  1. 安装 mysql 依赖
    cnpm install mysql
    在这里插入图片描述

  2. 定义 db.js 进行操作

//导入 mysql 依赖包,mysql 属于第三方的模块,就类似于 java.sql
var mysql = require("mysql");
const Connection = require("mysql/lib/Connection");

//1. 创建一个 mysql 的 Connection 对象
//2. 配置数据连接的信息

var connection = mysql.createConnection({
    //ip,端口,账号,密码,要操作的数据库
    host:"127.0.0.1",
    port:3306,
    user:"root",
    password:"root",
    database:"testdb"
})
//3. 开辟连接
connection.connect();
//4. 执行 curd
    // 进行增删改查
connection.query("select * from dbtest",function(error,results,fields){
    // 如果查询出错,直接抛出异常
    if(error) throw error;
    // 否则查询成功
    console.log("results = ",results);
});
//5. 关闭连接
connection.end();
// 最后一步:运行node db.js 查看效果
  1. 新建数据库:testdbdbtest
    运行
    在这里插入图片描述

3. ES6

3.1 ES6 的概述

ECMAScript
ECMAScript 是一种由 Ecma 国际通过 ECMA-262 标准化的脚本程序设计语言,这种语言在万维网上应用广泛,它往往被成为 JavaScript,所以它可以理解为是 JavaScript 的一个标准,但实际上后两者是 ECMA-262 标准的实现和扩展。

ECMAScript 是前端 js 的语法规范,可以应用在各种 js 环境中,如:浏览器或 node.js 环境。
它有很多版本:es1/2/3/5/6,很多新特性,可以在 js 环境中使用这些新特性。

3.2 ES6 的语法:let 和 const 命令

变量和常量的严格区分。

let 和 const 的定义

    <script>
        // 传统定义变量和常量的方式 统一使用var
        var name = "广东学相伴";
        var link = "https://www.kuangstudy.com";
        var PI = Math.PI;
        console.log(name);
        console.log(link);
        console.log(PI);

        // ES6 定义的方式
        let name2 = "百度";
        let link2 = "http://www.baidu.com"

        // 定义常量
        const PI2 = Math.PI;

        console.log(name2);
        console.log(link2);
        console.log(PI2);

    </script>

在这里插入图片描述

    <script>
        //let 和 cosnt 解决
        // 1:var的变量穿透的问题
        // 2:常量修改的问题
        for(let i=0; i<5; i++){
            console.log(i);
        }
        // 这里就造成变量穿透
        console.log(i);

        const PI = Math.PI;
        PI = 100;
        console.log(PI);

        // 在实际开发和生产中,如果是小程序、uniapp或者一些脚手架中,可以使用let和const
        // 但是如果你是 web 开发,建议使用var,因为在一些低版本的浏览器,不支持let和const
    </script>

3.3 ES6 的语法:模板字符串

以前,使用""''把字符串套起来

现在:使用 ``(反引号)

    <script>
        // 字符串会牵涉到动态部分
        var person = {
            name:"飞哥",
            address:"广东学相伴",
            link:"https://www.kuangstudy.com"
        }
        let address = "我是"+person.name+",我正在"+person.address+",网址为"+person.link;
        console.log(address);

        // es6的语法模板字符串语法
        let address2 = `ES6--我是${person.name},我正在${person.address},网址为${person.link}`;
        console.log(address2);
    </script>

在这里插入图片描述

3.4 ES6 的语法:函数默认参数与箭头函数

默认参数

    <script>
        // 函数默认参数
        function sum(a=100, b=100){
            return a+b;
        }
        var res = sum(100);
        //如果不定义默认参数,只传 a 的值,结果为 NaN
        console.log("res = ", res);
    </script>

箭头函数

<script>
        // 箭头函数 - 重点(在小程序、uniapp、常见脚手架中大量使用)
        var sum = function(a, b){
            return a + b;
        };

        // 改进1
        var sum = (a, b)=>{
            return a + b;
        }
        
        // 改进2
        var sum = (a, b)=>a + b;
        
        // 规律:
        // 1. 去掉function,
        // 2. 在括号后面加箭头
        // 3. 如果逻辑代码中仅有return,可以直接全部省去(如果有逻辑体,不能省略)
        // 4. 如果参数只有一个,括号可以省去(有多个参数,则不能省去)

        var arr = [1, 2, 3, 4, 5, 6];
        // var newarr = arr.map(function(obj){
        //     return obj * 2;
        // });
        //简化:
        var newarr = arr.map(obj=>obj * 2);
        console.log(newarr);
    </script>

在这里插入图片描述

3.5 ES6 的语法:对象的初始化的简写

核心代码

如果一个对象中的 key 和 value 的名字一样的情况下可以定义成一个。

<script>
        let info = {
            title:"广东学相伴",
            link:"https://www.kuangstudy.com",
            go:function(){
                console.log("我骑着小蓝车来公司上班");
            }
        };

        // es6简写
        // 因为对象是以 key:value 存在
        // 1. 如果 key 和变量名一致,可以只定义一次即可
        // 2. 如果 value 是一个函数,可以把 :function 去掉,剩下()即可
        var title = "广东学相伴";
        var link = "https://www.kuangstudy.com";
        let info2 = {
            title,
            link,
            go(){
                console.log("我骑着小蓝车来公司上班");
            }
        };

        console.log(info2);
        console.log(info2.title);
        console.log(info2.link);
        info2.go();
</script>

在这里插入图片描述

3.6 ES6 的语法:对象解构

核心代码:

对象解构:es6 提供一些快速获取对象属性和行为的方式。

<script>
        // 对象是以 key:value 存在,获取对象属性和方法的方式有两种:
        // 1. 通过.     2. 通过[]

        var title = "广东学相伴";
        var link = "https://www.kuangstudy.com";
        let info2 = {
            title,
            link,
            go(){
                console.log("我骑着小蓝车来公司上班");
            }
        };

        //1. 通过 . 的方式
        console.log(info2.title);
        console.log(info2.link);
        info2.go();
        //2. 通过 [] 的方式
        console.log(info2["title"]);
        console.log(info2["link"]);
        info2["go"]();

        // es6 对象解构 - 快速获取属性和方法的方式
        var {title, link, go} = info2;
        console.log(title, link);
        go();
</script>

在这里插入图片描述

3.7 ES6 的语法:传播操作符

把一个对象的属性传播到另外一个对象中

<script>

        // 对象传播操作符: ...
        var person = {
            name:"学相伴",
            address:"广东",
            link:"https://www.kuangstudy.com",
            phone:1234567,
            go(){
                console.log("开始上班了");
            }
        };

        //解构出来
        var {name,address,...person2} = person;
        console.log(name)
        console.log(address)
        console.log(person2)
    </script>

在这里插入图片描述
因为 name 和 address 已经被解构出来了,剩下的就全部给 person2 对象,快速把剩余属性给另外一个对象

3.8 ES6 的语法:数组 map 和 reduce 方法使用(了解)

map

<script>
        // 要对 arr 数组中每个元素 * 2
        var arr = [1,2,3,4,5,6,7];
        // 传统的方式
        let newarr = [];
        for(let i = 0; i < arr.length; i++){
            newarr.push(arr[i]*2);
        }
        console.log(newarr);

        // map -- 自带循环,并且会把处理的值回填到对应的位置
        var newarr2 = arr.map(function(ele){
            return ele * 2;
        });
        console.log(newarr2);

        // 用箭头函数 省略
        var newarr3 = arr.map(ele=>ele * 2);
        console.log(newarr3);

        // map 处理对象的数据
        var users = [{age:10,name:"小学"},{age:12,name:"小相"},{age:15,name:"小伴"}];
        var newusers = users.map(ele=>{
            ele.age = ele.age + 1;
            return ele;
        });
        console.log(newusers);
    </script>

在这里插入图片描述
在开发里临时给一个对象添加一个属性,非常麻烦。
可以使用这个方法。

reduce

reduce(function(), 初始值(可选)):
接收一个函数(必须)和一个初始值(可选),该函数接收两个参数:

  • 第一个参数是上一次 reduce 处理的结果
  • 第二个参数是数组中要处理的下一个元素

reduce()会从左到右依次把数组中的元素用 reduce 处理,并把处理的结果作为下一次 reduce 的第一个参数。如果是 第一次,会把前两个元素作为计算参数,或者把用户指定的初始值作为起始参数

<script>
        var arr = [1,2,3,4,5,6,7,8,9,10];
        // a = 1, b = 2, 3
        // a = 3, b = 3, 6
        // a = 6, b = 4, 10
        var res = arr.reduce((a,b)=>a+b);
        console.log("res = ",res);
</script>

在这里插入图片描述

Nodejs 小结

学习先去掌握一些常用的,然后再去拓展
ES6 的所有语法可以在 nodejs、uniapp、微信小程序中得到广泛的支持

4. NPM 包管理器

4.1 简介

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

#在命令提示符输入 npm -v 可查看当前npm版本
npm -v

作用:

1. 用来快速构建 nodejs 工程

打开终端,输入npm init 初始化
得到一个 package.json 这个文件里的内容如下:

{
  "name": "npmpro",		//工程名
  "version": "1.0.1",		//版本
  "description": "我是一个node工程",	//描述
  "main": "index.js",		//入口js
  "scripts": {		//运行脚本
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "node"
  ],
  "author": "学相伴",		//开发者
  "license": "ISC"			//授权协议
}

类似于:pom.xml 文件,用于管理依赖

#如果想直接生成 package.json 文件,那么可以使用命令
npm init -y

2. 快速安装和依赖第三方模块

2-1:如何快速安装依赖第三方模块?
使用 npm install 安装依赖包的最新版,
npm install xxxxnpm i xxx模块名

2-2:安装模块放在什么地方?
模块安装的位置:项目目录\node_modules

2-3:安装的模块如何使用?

// 导入模块redis
const redis = require("redis")

2-4:模块和 package.json 有什么关系?

"dependencies": {
    "mysql": "^2.18.1",
    "redis": "^4.6.6",
    "vue": "^3.3.2"
  }

通过npm install xxx 下载的模块会记录在 package.json 文件中,就类似于 maven 中的 pom.xml,记录的作用:复用。

把 package.json 文件直接扔给新项目,
直接执行 npm install,会自动下载。

2-5:如何运行?
node xxxx.js
运行过程中.js可以省去
终止命令行:CTRL + c

  1. 如何卸载模块?
    npm uninstall vue

7. webpack

7.1 什么是 webpack

webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

webpack 可以将多种静态资源 js、css、less 转换为一个静态文件,减少了页面的请求。

7.2 webpack 安装

1、全局安装
npm install -g webpack webpack-cli
2、安装后查看版本号
webpack -v

7.3 初始化项目

  1. 创建 webpack 文件夹
    npm init -y
  2. 创建 src 文件夹
  3. src下创建 common.js
exports.info = function (str) {
    document.write(str);
}
  1. src下创建 utils.js
exports.add = function (a, b) {
    return a + b;
}
  1. src下创建 main.js
const common = require('./common');
const utils = require('./utils');
common.info('Hello world!' + utils.add(100, 200));

7.4 JS 打包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的在线电影购票系统设计与实现【附源码】

基于SSM的在线电影购票系统设计与实现 互联网的不断迅猛发展&#xff0c;每个行业都在寻找新的机会&#xff0c;都在从传统的人工方式向先进的信息化过度。随着人民生活水平的提高伴随的精神文化层次的享受&#xff0c;而现代互联网时代人们的重要精神消费之一是电影行业&…

NAS +AList实现云盘映射(本地硬盘扩容大法)

准备工具&#xff1a; 1&#xff09;Alist的docker &#xff1a;xhofe/alist 2&#xff09;RailDrive软件 安装&#xff1a; 1&#xff09;安装alist的docker 注意一定要给读写权限&#xff0c;装载路径和我一样 端口一般和容器端口一致 环境变量 网络桥接就行 记得勾选自…

【Prompting】ChatGPT Prompt Engineering开发指南(1)

ChatGPT Prompt Engineering开发指南1 Prompting指南设置 提示原则策略1&#xff1a;使用分隔符清楚地指示输入的不同部分策略2&#xff1a;要求结构化输出策略3&#xff1a;让模型检查条件是否满足策略4: “Few-shot”提示 原则2&#xff1a;给模型时间“思考”策略1&#xff…

idea新建springboot项目并提交码云仓库

新建springboot项目 平常我们在使用联网方式新建springboot项目时总是会遇到连接失败等这种情况 IDEA创建项目&#xff0c;本质是从官网创建并下载项目&#xff0c;然后导入本地。 创建项目连接失败&#xff0c;一般是外国网站的原因导致连接超时&#xff0c;解决方式很简单&a…

C++linux高并发服务器项目实践 day11

Clinux高并发服务器项目实践 day11 线程同步互斥锁死锁读写锁读写锁相关操作函数 生产者消费者模型条件变量信号量 线程同步 线程的主要优势在于&#xff0c;能够通过全局变量来共享信息。不过&#xff0c;这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量&…

LabVIEWCompactRIO 开发指南17 网络流

LabVIEWCompactRIO 开发指南17 网络流 网络流类似于队列函数&#xff0c;因为它们是基于FIFO的&#xff0c;但与队列函数不同的是&#xff0c;网络流具有网络作用域。它们是为通过以太网进行无损、高吞吐量数据通信而设计和优化的&#xff0c;并且它们具有增强的连接管理功能…

Springboot +Flowable,各种历史信息如何查询(三)

一.简介 正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中&#xff0c;执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中&#xff0c;也就是流程历史信息表。 假设有一个流程&#xff0c;流程图如下&#xff1a; 当这个流程执行完毕后&#xff0c;以 ACT_RU_ 为前缀的…

学习新技术,争做新青年:请ChatGPT帮我写一篇计算机视觉分类算法论文

文章目录 学习新技术&#xff0c;争做新青年&#xff1a;你不会还不用 ChatGPT 吧&#xff1f;学习新技术请告诉我最好的图像分类模型是哪个请推荐最新的分类模型是哪个请详细介绍一下 Swin Transformer请给出Swin Transformer的论文链接请帮我分析一下Swin Transformer 的创新…

Java实现多线程操作多账户

前言 某公司一个面试题&#xff1a; 1.有二十个账户&#xff0c;每个账户初始余额10000元。 2.有十个转账线程&#xff0c;对二十个账户中的两个随机选取账户进行转账&#xff0c;转账额度100以内正整数随机数。 3.每个线程执行100次转账操作。 4.最后请打印出二十个账户的…

西门子PLC控制步进电机方法与接线(全)

一、步进驱动系统 步进驱动系统包含步进电动机和步进驱动器&#xff0c;前端由PLC发脉冲。 步进电机是将电脉冲信号转变为角位移或线位移以控制转子转动的开环控制电机&#xff08;可以通过安装编码器形成闭环系统&#xff09;。 它旋转是以固定的角度&#xff08;步距角&…

ThinkPHP6的控制器定义及控制器初使用

ThinkPHP6的控制器定义及控制器初使用 控制器定义 控制器文件通常放在controller下面&#xff0c;类名和文件名保持大小写一致&#xff0c;并采用驼峰命名&#xff08;首字母大写&#xff09;。 如果要改变controller目录名&#xff0c;需要在route.php(config/route.php)配…

redis从零开始(1)----五种基本类型:string/hash

认识redis NoSQL Nosql not only sql&#xff0c;泛指非关系型数据库&#xff0c;与之相对的是RDBMS(Relational Database Management System)&#xff0c;即关系型数据库 关系型数据库&#xff1a;列行&#xff0c;同一个表下数据的结构是一样的。 非关系型数据库&#xff…

原生js手动实现一个多级菜单效果(高度可过渡变化)

文章目录 学习链接效果图代码要点 学习链接 vue实现折叠展开收缩动画 - 自己的链接 elment-ui/plus不定高度容器收缩折叠动画组件 - 自己的链接 Vue transition 折叠类动画自动获取隐藏层高度以及手风琴效果实现 vue transition动画钩子- vue官网 vue transition 过渡动画…

vue基础入门

1. vue简介 1.1 什么是vue 官方概念&#xff1a;Vue&#xff08;读音/vju:/&#xff0c;类似于view&#xff09;是一套用于构建用户界面的前端框架 1.2 vue 的特性 vue 框架的特性&#xff0c;主要体现在如下两方面&#xff1a; ① 数据驱动视图 ② 双向数据绑定 数据驱动…

IMS补充业务场景介绍

呼叫保持流程 通话主动Hold的一方,发INVITE消息,媒体流从sendrecv变为sendonly,对方返回200 ok,媒体流从sendrecv变为recvonly,双方ACK后,进入呼叫保持状态,没有通话的RTP包。 大致流程如下 UE A发送INVITE(Sendonly)到网络 网络发送INVITE(Sendonly)到UE B UE发…

Linux文件属性修改

关于我们的文件属性如何修改呢&#xff1f; 我们今天来看一下 chmod chmod u(拥有者)/g(所属组)/o(其他人)(-)r/w/x(t) 文件名 就是这样&#xff0c;我们演示几个 我们想给拥有者去掉file1的读权限 我们file1的拥有者已经没有读权限了&#xff0c;那么我们还想加回来呢…

asp.net+C#基于web的旅游网站自驾游网站

&#xff08;1&#xff09;登录注册模块&#xff1a;输入账号密码&#xff0c;数据库进行验证&#xff0c;正确通过后&#xff0c;根据不同的账户信息&#xff0c;不同角色&#xff0c;获取不同的功能。 &#xff08;2&#xff09;自驾游模块&#xff1a;此模块可以分享自己自…

《计算机网络—自顶向下方法》 第五章Wireshark实验:UDP 协议分析

用户数据报(UDP)协议是运输层提供的一种最低限度的复用/分解服务&#xff0c;可以在网络层和正确的用户即进程间传输数据。UDP 是一种不提供不必要服务的轻量级运输协议&#xff0c;除了复用/分用功能和简单的差错检测之外&#xff0c;几乎就是 IP 协议了&#xff0c;也可以说它…

Python操作Redis常见类型详解

1、windows 上安装 Redis 便于测试&#xff0c;笔者在 windows 上安装 Redis Redis 官方不建议在 windows 下使用 Redis&#xff0c;所以官网没有 windows 版本可以下载。微软团队维护了开源的 windows 版本&#xff0c;对于普通测试使用足够了。 1.1、安装包方式安装 Redis…

万字收藏:《2023网络工程师年度必看书单》

晚上好&#xff0c;我是老杨。 这周是总结周&#xff0c;更新的第三篇内容&#xff0c;还是关于总结的。很多人让我推荐网工适合看的书&#xff0c;其实我推荐过好多次了。 趁着年底&#xff0c;一起把我认为网工适合看的、推荐你看的、值得看的书整理一下&#xff0c;供新老…