• Node.js学习(一)----- 基础知识


    1、Node的基础

    • 什么是Node.js

      Node.js 是一个基于 ChromeV8 引擎的 JavaScript 的运行环境。Node.js使用了一个事件驱动,非阻塞的I/O模型,使其轻量又高效(Node.js可以处理高并发项目)
    • 为什么要学习Node.js
      • 不会后端的前端工程师不是好前端;
      • 很多前端的工具都是用node来写的,想写好这些工具,必须要学会Node.js;
      • Node可以创建一个服务器,是一门后端语言;
      • 用Node可以调用很底层的接口,Node可以写桌面的应用程序;
      • Node可以写操作系统;
    • Node.js的安装
      • 官网下载安装包  http://nodejs.cn/
      • 安装完成后,会自动配置好环境变量,可以在任何一个目录当中访问node命令
      • 在控制台输出 node -v 查看版本号
        • 版本分类:大版本号    小版本号  补丁版本号(奇数版本一般为不稳定版本,用于测试的版本,而偶数版本为稳定版本)
        • LTS为长期使用的版本   current为最新版本
    • 常用命令讲解
      • dir      列出当前目录下面所有的文件
      • cd       进入到指定的目录
        • cd.        进入到当前目录
        • cd..       进入到上级目录
      • md 目录名        创建文件夹
      • rd   目录名        删除文件夹
      • cd . > 文件名.后缀       创建文件夹
      • cls  清屏
      • exit(ctrl +  c)      退出命令行
    • 进程与线程
      • 进程的概念
        • 系统进行资源分配和调度的基本单位,是操作系统结构的基础;(我们写的代码和程序都是放在进程里面的,相当于工厂中的车间
        • 进程为程序的运行提供了必备的环境      (右击 任务栏 -->任务管理器  --> 进程)
      • 线程的概念
        • 计算机中的最小计算单位,负责执行进程中的程序(相当于车间中的操作工人)
      • 单线程:js是单线程,时间片分隔
      • 多线程:根据任务决定开启几条线程
      • Node服务器:单线程,但很健壮,后台拥有一个I/O线程池进行调度(分布式服务器部署)

    2、用Node.js写一个简单的Hello World

    • 在Visual Studio Code的插件商店中下载插件 Terminal ,这个插件的作用是可以在代码编辑器中直接打开终端,可以一边写代码一边运行终端查看效果;
    • 如何让Node.js成为JavaScript的运行环境
      • 打开命令行cmd
      • 输入node命令,进入node的环境,就可以编写JS 代码
      • 按住两次ctrl + c(.exit)退出node的运行环境
    • Node.js是JavaScript的运行环境,浏览器也是JavaScript的运行环境,两者有什么区别?
      • 浏览器的运行环境是有安全机制的,不能调用底层的接口文件,不能实现创建文件或者目录等,浏览器中可以识别DOM与BOM的对象;
      • Node.js可以调用底层的接口文件,也可以创建文件与目录,Node.js中没有DOM与BOM的概念;
    • 搭建node的服务器
      • 创建一个node的项目目录;
      • 创建一个js文件;
      • 运行这个js文件(运行方式:cd的方式进入该目录,通过node 文件名.js执行)      例如 node app.js

                         

    • Node的全局对象
      • console.log   setTimeout  setInterval  clearInterval
        var time = 0;
        var timer = setInterval(() => {
            time += 2;
            console.log(`${time}seconds has passed`)
            if (time > 5) {
                clearInterval(timer)
            }
        }, 2000);
      • __dirname(输出当前文件所在的目录)
      • __filename(输出当前文件的绝对路径)    ls也可以

                        

      •  require    exports等

    3、Node.js开发需要模块化

    • 模块化的出现
      • 如果程序设计的规模达到了一定程度,则必须对其进行模块化,模块化可以有多种形式,但都提供了能够将代码分割为多个源文件的机制。(前端没多大必要, 所以不太需要,服务器端开发, 没有模块化开发思想就玩不转了);
    • 模块化的好处:功能独立,便于后期的管理和维护,防止全局变量的污染;
    • CommonJS规范
      • CommonJS规范的提出,主要是为了弥补JavaScript没有模块化标准的缺陷;
      • CommonJS是模块化的标准(规范),Node.js就是CommonJS的实现(requireJS是AMD的规范);
      • CommonJS对模块的定义:一、模块引用require("路径")   二、模块定义     三、模块标识
      • 从文件角度看,每个JS文件就是一个模块;从结构看,多个JS文件之间可以相互require,共同实现了一个功能,这整体上也是一个模块;
      • 在Node.js中,一个模块中定义的变量、 函数等,都只能在这个文件内部有效;当需要从此JS文件外部引用这些变量、函数时,必须使用exports胡总和module.exports进行暴露,使用者通过require引用
    • 模块引用
      • 在Node中,一个js文件就是一个模块;
      • 暴露模块中的变量和函数,需要使用export关键字,只需要将需要暴露给外部的变量或方法设置为exports的属性即可
      • 在Node中,通过require()函数来引入外部的模块,引入外部模块要加上 . 或者 ..
      • 在Node中,每一个js文件中的js代码都是独立运行在一个小闭包中,而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问(目的:全局变量私有化, 避免全局污染)
    • 模块标识
      • 当我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块;例如:const sumJs = require('./sum')
    • 模块分类
      • 核心模块(内置模块):由node引擎与node_modules提供的模块,模块的标识:http、querystring、fs、url、events、path、global...
      • 文件模块(自定义模块):由用户自己创建的模块,模块的标识:文件的路径(绝对路径,相对路径),使用exports或者module.exports进行模块的暴露;
      • 底层模块(第三方模块):底层由C++编写,模块的标识:ejs、express、supervisor、cheerio...,使用之前,需要进行安装 cnpm/npm i --save 模块名称
    • 模块化的练习
      • cd . > sum.js创建sum.js文件,定义求和函数sum与变量pi
        // 封装一个函数  求两个数的和
        function sum(a, b) {
            // 使用了ES6的模板字符串
            return `the sum of two elements is ${a + b}`
        }
        const pi = 3.14
        // module.exports对外暴露出一个对象,sum与pi是他的键,右边的sum与pi则是他的值
        // 第一种方式
        module.exports.sum = sum
        module.exports.pi = pi;
      • cd . > app.js创建app.js文件,并在里面使用sum.js里面的函数与变量
        const sumJs = require('./sum')
        console.log(sumJs.sum(1, 6))
        console.log(sumJs.pi)
      • 第二种:
        module.exports = {
            sum: sum,
            pi: pi
        }
      • 第三种直接将数据导出
        module.exports = {
            sum: function (a, b) {
                // 使用了ES6的模板字符串
                return `the sum of two elements is ${a + b}`
            },
            pi: 3.14
        }
      • 结果为:
        the sum of two elements is 7
        3.14
    • Node.js文件组成剖析
      • 当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码   function (exports, require, module, __filename, __dirname) {
      • 在代码的最底部,添加  }
      • 所以模块中的代码都是包装在一个函数中执行的,并且在函数执行的同时传递进了5个实参
    • exports 和 module.exports的区别
      • exports只能使用.语法来向外暴露内部变量,例如exports.xxx = xxx;
      • module.exports既可以通过.语法,也可以直接赋值一个对象,例如module.exports.xxx =xxx;module.exports = {xxx: yyy};

    4、包和包管理器

      • 概念:CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具, 这组工具就叫做包;
      • 组成:
        • 包结构:用于组织包中的各种文件,实际上就是一个压缩文件,解压以后还原为目录
          • bin           可执行二进制文件;
          • lib            js代码;
          • doc         文档;
          • test         单元测试;
        • 包描述文件 package.json:描述包的相关信息,以供外部读取分析,它是一个JSON格式的文件,位于包的根目录下
    • 包管理器(NPM)
      • npm是node的包管理库、也是 网站,还是一条命令;
      • npm的小缺点
        • 包是同步下载的;
        • 一个项目下载过一次,在另一个项目中重新下载;
      • 常用命令:
        • npm  -v                 查看版本
        • npm  --version      查看所有模块的版本
        • npm  search  包名/部分包名    搜索包
        • npm  init                初始化package.json文件
        • npm  install            根据package.json下载当前项目所依赖的包
        • npm  install / i  包名                   安装包
        • npm  install / i  包名  --save       安装包并添加到依赖中
        • npm  install / i  包名  -g              全局安装包,  用于一些编译根据, 比如: gulp,  webpack等
        • npm  remove / r  包名   删除包 
      • yarn:yarn 是一种命令,就是对npm 命令的包装(Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。)
        • 好处:
          • yarn是异步的,安装起来比npm快;
          • yarn可以有效的保证版本号一致,开发的时候不容易出错;
          • yarn本地已经安装过的包会有缓存,在其他项目中安装时直接调用缓存中的包会费城快;
        • 目的:解决这些团队使用 npm 面临的少数问题,一、安装的时候无法保证速度/一致性;二、安全问题,因为 npm 安装时允许运行代码;
        • 使用:
          • 创建一个yarn目录;
          • 执行yarn init(相当于npm init),一路回车,用yarn把代码变成包;
          • 常用命令:
            • yarn  install(相当于npm  install),批量安装package.json中的所有插件;
            • yarn  add  cheerio(下载第三方插件包),自带了--save的特性;
            • yarn  update  cheerio (更新一个依赖包)
            • yarn  remove  cheerio(删除一个依赖包)
      • CNPM的使用
        • 因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,也有可能被墙,   如果npm的服务器在中国就好了,所以马云的淘宝团队干了这事。
        • 使用方式:npm install -g cnpm --registry=https://registry.npm.taobao.org
        • 淘宝镜像官网:http://npm.taobao.org/

                                   

    5、遇到的问题

      暂无

  • 相关阅读:
    Bootstrap3入门
    Pi
    比Redis更快:Berkeley DB面面观
    搞定KMP匹配算法
    elasticsearch文档-analysis
    21本计算机数学相关的免费电子书
    [Android开发常见问题-12] Android开发中debug.keystore如何使用。
    (Java实现) 组合的输出
    (Java实现) 自然数的拆分
    (Java实现) 自然数的拆分
  • 原文地址:https://www.cnblogs.com/wxh0929/p/12074266.html
Copyright © 2020-2023  润新知