Node.js入门(自定义模块、系统模块、第三方模块)

Node是什么

node是一个基于chromeV8引擎的js代码运行环境、
Node.js 使用了一个事件驱动,非阻塞I/O的模型。(链接详解)

node.js与浏览器js的区别

js运行在浏览器中、浏览器作为解析器
js运行在`node`这个环境中就叫node.js、node作为解析器(node.js 就是把浏览器的解析器封装起来作为服务端运行平台)

nodejs下载
https://nodejs.org/zh-cn/download/
LTS = long term support 长期支持版 稳定版
Current 最新版 拥有最新特性 稳定版本的候选版本

nodejs的安装
windows系统用户在Node官网下载后缀为.msi的文件到本地,双击下一步下一步安装即可。
安装完成后 在命令行中输入node -v、出现版本号即为成功
在这里插入图片描述
若出现如下错误
将node.exe所在文件夹配置到PATH系统环境变量中
在这里插入图片描述

PATH环境变量
告诉操作系统在命令行工具中执行的命令在什么位置。
可以在任何盘符下面输入你想要输入的命令,而不需要将盘符切换到命令的所在位置。
在这里插入图片描述

nodejs的入门

nodejs的组成

JavaScript由三部分组成,ECMAScript,DOMBOM。
NodeJs中除了ECMAScript以外,Node环境还提供了一些操作系统的API,例如文件操作,网络操作等等。

在这里插入图片描述

Node.js基础语法

语法

/* 文件名称 1.helloworld.js */ 
console.log('nodejs入门'); /* 
其他ECMAScript语法都可以在这里使用 比如数组、对象、判断、循环 */

在命令行中指向文件:node 文件名
使用 node 输出文件时输入首几个字母+Tab会自动补全 js后缀可省略
在这里插入图片描述

全局对象

在浏览器中全局对象是window,在Node中全局对象是global
Node中全局对象下有以下方法,可以在任何地方使用,global可以省略
console.log()
setTimeout()
clearTimeout()
setInterval()
clearInterval()

在浏览器环境中 全局作用域下声明的变量可以在window对象下找到
var message = 'hello'; 
console.log(window.message); // 'hello'

但是在Node环境下则不可以
console.log(global.message); // undefined

模块化开发

模块开发、一个js就是一个模块、多个模块组成应用、抽离一个模块不会影响其他功能

JavaScript弊端() 
浏览器端JavaScript在使用的时候存在两大问题, 命名冲突和文件依赖。 
模块化开发需要依赖第三方库文件,具有代表性有require.js和sea.js。
 
模块化开发优势()
解决命名冲突和文件依赖 (`内部定义的变量和函数默认外部无法得到`)
将具有独立功能的代码分离到单独的文件中 
项目代码易维

自定义模块
一个JS文件即是一个模块,在模块内部定义的变量和函数默认情况下在外部无法得到。

NodeJs提供了exports和require关键字用来导入导出模块数据

// 创建b.js 
// 在模块内部定义version变量 
let version = 1.0; 
// 在模块内部定义sayHi方法 
const sayHi = name => `您好, ${name}`; 
// 向模块外部开放sayHi方法 
exports.sayHi = sayHi; 
// 向模块外部开放version变量 (导出)
exports.version = version;
// 创建a.js
// 在a.js中引入b模块 
let b = require('./b.js');
// 输出b模块中的version变量
console.log(b.version);// 1
// 调用b模块中的sayHi方法 并输出其返回值
console.log(b.sayHi('张三')); // 您好,张三 
// 注意:在a.js文件中导入的实际上就是b.js中的exports对象。

在这里插入图片描述
模块导出注意事项

exports.属性名 = 属性值; 
module.exports = (以这个为主);

exports是module.exports的别名(地址引用关系)`导出对象最终以module.exports为准`
如果一个模块没有导出任何成员, 导入的时候是空对象

系统模块

Node环境封装了大量系统级别的API,为了方便管理和使用,不同功能的API被划分到了不同的类别中,例如
文件操作,网络操作,这个类别就是模块。模块内部实际上就是对功能的封装。

  • fs模块:文件操作

fs.readFile() 读文件
fs.writeFile() 向文件中写入内容 (覆盖)
fs.appendFile()向文件中追加内容 (追加)
fs.mkdir() 创建目录

fs.readFile() 读文件

//读取文件操作
//1、通过模块的名字对fs对模块进行引用
const fs=require('fs');
//读取文件中的内容
fs.readFile('./demo.txt','utf8',(err,doc)=>{
   //文件读取错误、err是一个对象、包含错误信息
     //如果文件读取正确、err是null
   console.log(err);
     //doc是文件读取的结果(文件的内容)
   console.log(doc);
     
});

在这里插入图片描述
fs.writeFile()

const fs = require('fs');
//文件写入操作
//写入文件的位置、写入的内容、写入后的通知
fs.writeFile('./demo.txt', '我写入了一只小青蛙', err => {
    //如果文件有报错信息
    if (err != null) {
        //打印错误
        console.log(err);
        return;

    }
      //写入打印提示信息
    console.log('文件内容写入成功');//文件内容写入成功
})

在这里插入图片描述

path模块:路径操作
path.parse() 解析路径 获取路径信息 
path.join() 路径拼接
不同系统路径分隔符不统一
防止路径拼接少写斜杠问题
使用绝对路径进行路径拼接 __dirname
const fs = require('fs');
const path = require('path')
//获取当文件的绝对路径
console.log(__dirname);
//获取当前文件绝对路径、通过绝对路径去拼接文件
fs.readFile(path.join(__dirname, './01-1helloWorld.js'), 'utf8', (err, data) => {
    console.log(err);
    //打印获取的文件的内容
    console.log(data);


})

在这里插入图片描述
第三方模块

别人写好滴、具有特定功能的、我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件 组成并且被放置在一个文件夹中,所以又名包。
第三方模块有两种形式:

  1. 以文件的形式存在,提供实现项目具体功能的API接口。
  2. 以命令行工具形式存在,辅助项目开发,例如
  1. 当文件修改时,自动重新node该文件
  2. 将md文档转换为更加通用的HTML文档

获取第三方文件

  • 所有第三方模块都被统一放置在了一个叫做npm的网站中。
  • npm网站提供了npm的命令行工具用以下载此网站中的第三方模块。
  • Node环境默认集成了这个工具,所以可以直接使用,使用方式如下:
--**本地安装:npm install package => 用npm命令安装(下载)第三方模块 (文件模块)** 
--**全局安装:npm install package -g => 用npm命令安装(下载)第三方模块 (命令行工具)** 
---`g表示全局安装`,即模块的使用不局限于当前项目,一般用于安装命令行工具。
  • 默认情况下文件模块会被下载至一个叫做node_modules的文件夹中,如果文件夹不存在则自动创建。
  • 全局安装的命令行工具会被下载到C:\Users\用户名\AppData\Roaming\npm文件夹中。
 - 使用npm命令卸载包的方式 
本地卸载: --**npm unintall package** => 用npm命令卸载包
全局卸载: --**npm unintall package -g** 

更改下载镜像

由于npm网站在国外,所以下载速度会比较慢。
nrm(npm registry manager )是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换

1.安装nrm:在命令行执行命令,npm install -g nrm,全局安装nrm。
2.使用:执行命令nrm ls。
nrm ls    
3、查看可选的源
*npm ---- https://registry.npmjs.org/

cnpm --- http://r.cnpmjs.org/

taobao - http://registry.npm.taobao.org/

eu ----- http://registry.npmjs.eu/

au ----- http://registry.npmjs.org.au/

sl ----- http://npm.strongloop.com/

nj ----- https://registry.nodejitsu.com/

其中,带*的是当前使用的源,上面的输出表明当前源是官方源。

4.切换:如果要切换到taobao源,执行命令nrm use taobao。
5.增加

你可以增加定制的源,特别适用于添加企业内部的私有源,执行命令 nrm add <registry> <url>,其中reigstry为源名,url为源的路径。
nrm add registry http://registry.npm.frp.trmap.cn/6.删除:执行命令nrm del <registry>删除对应的源。
7.测试速度:你还可以通过 nrm test 测试相应源的响应时间。

使用第三方模块
在需要使用的文件中通过require方式将模块引入

  • require(‘第三方模块名称’);

根据文档提供的API使用第三方模块

  • nodemon
  • gulp
  1. gulp的安装:
1. 定位终端到项目目录 执行 npm install gulp -s 本地安装gulp的库文件
2. 执行 npm install gulp-cli -g 全局安装gulp的命令行工具
  1. gulp的插件:
1. gulp-htmlmin:html代码压缩 安装 npm install --save gulp-htmlmin
2. gulp-file-include:html公共模块提取 npm install gulp-file-include
3. gulp-less:less语法转化 npm install gulp-less
4. gulp-csso:css压缩 npm install gulp-cssgo
5. gulp-babel:JavaScript语法转化 npm install --save-dev gulp-babel @babel/core
@babel/preset-env
6. gulp-uglify:压缩混淆js代码 npm install --save-dev gulp-uglify
7. !!!!!!注意!Gulp 4最大的变化就是你不能像以前那样传递一个依赖任务列表 如果
Gulp是4.0的版本需要手动指定版本号 比如 npm install gulp@3.9.1 -D

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章