大前端基础【3-1笔记】Node.js

文章内容输出来源:拉勾教育前端就业急训营2期

node.js

官网链接:https://nodejs.org/zh-cn/

node.js不是一门语言,也不是javaScript框架,是除了浏览器之外,可以运行javaScript代码的环境

1、Node.js下运行JavaScript

(1)脚本运行,node xx.js

(2)交互模式,node + 回车打开交互模式,js代码运行代码,.exit退出交互模式

2、全局对象

Node.js下的全局对象是global

交互模式下,声明的变量和函数都属于global,例如var a = 1;global.a可以访问到。

脚本模式下,声明的变量和函数不属于global,例如var a = 1;global.a访问不到。

注意:Node.js不能访问浏览器端的全局对象window,如下图
在这里插入图片描述

3、全局函数

JavaScript语言提供的全局函数,在Node.js下依然可用。例如:

  • parseInt/parseFloat/isNaN/isFinite/eval…
  • 一次性定时器(setTimeout / clearTimeout)
  • 周期性定时器(setInterval / clearInterval)

Node.js 环境也提供了一些全局函数

  • 立即执行定时器(setImmediate / clearImmediate)
  • 进程立即执行定时器(process.nextTick)

4、Node.js模块

模块(包)是Node.js应用程序的基本组成部分,大部分前端工程化的工具,也是以模块的形式存在的。

Node.js模块

模块类型说明学习链接
内置模块官方提供的,核心模块,跟随 Node.js 一起安装http://nodejs.cn/api/
自定义模块工程师自己开发工程师自己开发
第三方模块社区维护的,需要单独下载才能使用https://www.npmjs.com/
4.1 console
输出函数
var obj = {
    name: 'tom'
}
console.log(obj); // 输出 { name: 'tom' }
console.table(obj);//表格形式输出
┌─────────┬────────┐
 (index) │ Values │
├─────────┼────────┤
│  name   │ 'tom'  │
└─────────┴────────┘
计时函数
//计时函数
console.time('for'); //计时开始
for(let i = 0; i < 1000000; i++){
    
}
//注意:此时的for一定要与计时开始时的label保持一直,否则会报错
console.timeEnd('for') //计时结束
4.2 process

process 对象是一个全局变量,提供了有关当前 Node.js 进程的信息并对其进行控制。

// process是全局变量,使用时,无需引入,引入也不报错,但是没有必须引入
// const process= require("process");
console.log(process)

//输出当前版本
console.log(process.version) //v14.16.0

//输出操作系统架构
console.log(process.arch)  // x64

//输出操作系统平台
console.log(process.platform) // win32

//环境变量
console.log(process.env)
//自定义环境变量
process.env.NODE_ENV = 'develop'
console.log(process.env.NODE_ENV) // develop

//获取进程编号
console.log(process.pid)  //(系统分配,每次执行不一样)

//杀死进程
process.kill() //参数:进程编号
4.3 path

path模块提供了有关路径操作的函数,使用之前,需要通过require引入(类似Java中的import)

// 引入
const path = require("path")

//获取当前文件所在的路径
console.log(process.cwd())
console.log(__dirname) 

//获取当前文件所在的路径
console.log(process.cwd())

//获取当前文件所在的路径
// dir = directory 目录 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(__dirname) 

//获取当前文件的完整路径 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(__filename) 

//获取文件的扩展名 .js
console.log(path.extname(__filename))

// 获取路径中的目录部分 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(path.dirname(__filename))

//获取路径中的文件名 path.js
console.log(path.basename(__filename));

// 相当于../
const t = path.join(__dirname, '..') 
console.log(t) // C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01

//将多个路径合并起来  
const a = path.join("d:/",'a', 'b')
console.log(a) // d:\a\b
4.4 fs

fs(file system)提供了文件操作的API

1、文件写入
const fs = require("fs");

fs.writeFile('./1.txt','我是写入的内容', (err)=>{
  if(err){
    throw err;
  }
  console.log("写入成功")
});
2、文件读取
var flieName = path.join(__dirname, './1.txt');
fs.readFile(flieName, (err, data)=>{
  if(err) throw err;
  //data是二进制数据,但是以16进制数据输出
  console.log(data);
  console.log(data.toString()) // 我是写入的内容
})
3、删除文件
var flieName = path.join(__dirname, './1.txt');
fs.unlink(flieName, (err)=>{
  if(err) throw err;
  console.log("刪除成功")
})
4、追加写入
//追加写入
fs.appendFile(__dirname + '/2.txt', '曾经有一首歌是这样唱的', err => {
  if(err) throw err;
  console.log("追加成功")
})
5、创建目录
const fs = require("fs");

//创建目录
fs.mkdir('./a', err => {
    if(err){
        throw err;
    }
    console.log("success");
})
6、删除目录
// 删除目录 rmdir 只能删除空目录
// 先删除目录下的普通文件,再通过rmdir删除空目录
fs.rmdir('./a', err => {
    if (err) {
        throw err;
    }
    console.log("删除成功");
})
7、重命名
//重命名
fs.rename(__dirname + "/a1", __dirname + "/a11", err => {
    if (err) {
        throw err;
    }
    console.log("重命名成功");
});
8、读目录
fs.readdir(__dirname, (err, data) => {
    if(err) throw err;
    console.log(data.length); //文件夹和文件都可以读取出来
    data.map((d)=>{
        console.log(d);
        fs.stat(__dirname + '/' + d, (err, stat) => {
            if(err) throw err;
            if(stat.isDirectory()){ //判断是否是目录
                console.log("目录:", d);
            }else if(stat.isFile()){
                console.log("文件:", d);
            }
        })
    })
9、文件流

为什么选择"流"?

1、内存效率提高

无需加载大量的数据,将大数据切成小块,占用内存更少。

2、时间效率提高

接获数据后立即开始处理,无需等到内存填充满。

const fs = require("fs");

//1、创建读取流
var readStream = fs.createReadStream('./file2.txt')

//2、创建写入流
var writeStream = fs.createWriteStream('./file_stream.txt')

//3、把读取流通过管道传递给写入流
readStream.pipe(writeStream);

4.5 http
const http = require("http")

/**
 * 创建服务器
 */
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader("Content-type", "text/plain;charset=utf-8")
  res.end("你好,node.js")
})

/**
 * 发布web服务
 */
const port = 3000;
const host = "localhost"
server.listen(port, host, ()=>{
  console.log(`服务器运行在htp://${host}:${port}`)
})
4.6 自定义模块
  • Node.js中每个单独的.js文件,就是一个模块。

  • 每个模块中都有一个module变量,代表当前模块。

  • module的exports属性是对外的接口

    • 只有导出的属性和方法才能被外部调用。
    • 未导出的内容是模块私有,不能被外部访问。
  • 使用时,通过require引入(路径写对)

4.7 模块的加载逻辑

按照组织模式划分

  • 文件模块:一个独立的.js文件
  • 目录模块:将多个.js文件放在一个目录中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7hIQLLU-1616634844114)(C:\Users\张艳杰\AppData\Roaming\Typora\typora-user-images\1616228666540.png)]

默认index.js是入口文件,如果没有index.js,则在package.json中查找main对应的属性值。

例如,指定入口文件是a.js:

{
  "main": "a.js"
}
4.8 第三方模块

想要使用第三方模块,需要单独安装,学习网站:https://www.npmjs.com/

npm:(node package manager)npm是一个命令,跟随node.js一起安装。(npm --version)npm可以下载(安装)包和包的依赖,npm安装:npm install <package-name>

npm镜像源:npm管理的Node.js包的资源管理地址,https://www.npmjs.com/。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhTkAs8p-1616634844115)(C:\Users\张艳杰\AppData\Roaming\Typora\typora-user-images\1616229832908.png)]

修改镜像源:

npm config set registry https://registry.npm.taobao.org

获取当前镜像源

npm config get registry

4.9 npm

npm安装包的方式:

  • 全局安装:多个项目都能用到(把包当全局工具使用)
  • 项目安装:还有当前项目用到
全局安装:

例如:安装使用minify:https://www.npmjs.com/package/minify

安装:npm install p-name -g

卸载:npm uninstall p-name

项目安装:

1、创建项目目录(mkdir project

2、进入项目(cd project

3、初始化项目(npm init

4、在项目中安装

安装:npm i p-name --save npm i p-name -S

例如:

//安裝
npm install minify --save

//执行压缩
.\node_modules\.bin\minify index.js > ./index.mini.js
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值