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,DOM,BOM。
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);
})
第三方模块
别人写好滴、具有特定功能的、我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件 组成并且被放置在一个文件夹中,所以又名包。
第三方模块有两种形式:
- 以文件的形式存在,提供实现项目具体功能的API接口。
- 以命令行工具形式存在,辅助项目开发,例如
- 当文件修改时,自动重新node该文件
- 将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
- gulp的安装:
1. 定位终端到项目目录 执行 npm install gulp -s 本地安装gulp的库文件
2. 执行 npm install gulp-cli -g 全局安装gulp的命令行工具
- 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