Node.js

2023-11-05

Node.js

Node.js基础

概念

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

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

Chrome V8引擎

浏览器内核引擎主要分为两类:

  • 渲染引擎:能够将HTML/CSS/JavaScript文本及相应的资源文件转换成图像结果。渲染引擎的主要作用是将资源文件转化为用户可见的结果。
  • JavaScript引擎:能够解析和编译 JavaScript 代码。

V8引擎是一个JavaScript引擎实现,最初由一些语言方面专家设计,后被谷歌收购,随后谷歌对其进行了开源。V8使用C++开发,在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码,并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。V8支持众多操作系统,如windows、linux、android等,也支持其他硬件架构,如IA32,X64,ARM等,具有很好的可移植和跨平台特性。

下载安装

下载

安装包可以在Node.js官网下载,文档可参考Node.js中文网

安装

傻瓜式安装,除了路径啥都不用改,一路next。

环境变量会自动配置。

测试
  • 查看版本号

    node -v
    
  • 跑个hello world

    node hello.js
    
设置cache和prefix位置
npm config set cache "D:\develop\Node.js\node_cache"
npm config set prefix "D:\develop\Node.js\node_global"

模块化

在ES6 之前,前端是没有模块化的语法的。程序员们就通过一些插件(例如:require.js 和 sea.js)来实现前端的模块化。但是从 ES6 开始,JS 就原生支持模块化了。

模块化规范:

  • AMD
  • CMD
  • CommonJS
  • ECMAScript 2015

前端模块化

JS文件设置为模块

在 HTML 中引入 JS 文件时,添加一个 type="module" 的属性,可以将该 JS 文件设置为一个模块化文件:

<script src="./index.js" type="module"> </script>
加载模块

在一个模块中加载另一个模块import ' 相对路径 '

import './js/a.js';
import './js/b.js';
暴露与引入
  • 在一个 JS 文件中通过 export 暴露数据出去:

    // a.js
    export var num = 100;
    export function foo() {
        console.log('b.js foo');
    }
    
  • 在一个 JS 文件中,默认只暴露一条数据出去,可以通过 export default 来进行暴露:

    // b.js
    var num = 100;
    export default num;
    
  • 通过 export 暴露的数据在另一个 JS 文件中通过 import from 来加载文件并获取数据,可使用as更改变量名:

    import { num as n, foo } from './a.js';
    
  • 通过export default暴露的数据在另一个 JS 文件中,在import from时可以任意变量命名来接收暴露的数据:

    import b from './b.js';
    

后端模块化

CommonJS

CommonJS是 Nodejs 的服务端规范。CommonJS 中规定,每一个 JS 文件都是一个独立的模块,模块与模块之间都有自己独立的作用域,默认情况下,互相之间不能进行数据的访问。

require()

require()用于在JS文件中引入另一个JS文件,可设置引入的文件路径。

require('./a.js');

通过 require 引入的文件,都会运行加载。

路径规则
  1. 同级目录之间,路径必须加 ./
  2. 引入的 JS 文件的后缀名 .js 可以省略。
  3. 路径中只有一个文件名,默认该文件加载的是 Nodejs 自带的模块或第三方下载的模块。
模块缓存

当我们通过 require() 首次加载完一个模块后,Nodejs 会将该模块进行缓存。后续再加载该模块时,会直接从缓存中读取该模块。

换句话说,同一个文件被 require 多次,只会执行一次。

暴露与引入

默认情况下,Nodejs 中的 JS 文件互相之间不能进行数据的访问,如果需要进行数据交换,那么就需要经过以下两个步骤:

  1. 在一个 JS 文件中把数据通过 module.exports 暴露出去:

    module.exports.num = 10;
    module.exports = {
        num: 10
    };
    
  2. 在另一个 JS 文件中通过 require() 引入进来:

    const aJS = require('./a.js');
    const { num } = require('./a.js');
    

Nodejs 内置模块

fs文件系统

  • 引入

    const fs = require('fs');
    
  • 异步读取文件

    fs.readFile('./test.txt', 'utf-8', function (err, data) {
        if (err) {
            console.log('文件内容读取失败');
        } else {
            console.log('文件内容读取成功', data);
        }
    });
    
  • 同步读取文件

    try {
        const data = fs.readFileSync('./test.txt', 'utf-8');
        console.log('文件内容读取成功', data);
    } catch (error) {
        console.log('文件内容读取失败');
    }
    
  • 覆盖写入

    fs.writeFile('./test.txt', '这是新写入的内容', function (err) {
        console.log('err', err);
    });
    fs.writeFileSync('./test.txt', '这是同步新写入的内容');
    
  • 追加写入

    fs.appendFile('./test.txt', '\n这是追加的新内容', (err) => {
        console.log(err);
    })
    fs.appendFileSync()
    
  • 复制文件内容

    fs.copyFile('./test.txt', './newTest.txt', (err) => {
        console.log(err);
    })
    
  • 删除文件

    fs.unlink('./newTest.txt', err => {
        console.log(err);
    })
    
  • 重命名文件

    fs.rename('./bbb.txt', './data/bbb.txt', err => {
        console.log(err);
    })
    
  • 创建文件夹

    fs.mkdir('./data/b', (err) => {
        console.log(err);
    });
    fs.mkdirSync('./data/a')
    
  • 删除文件夹

    只能删除空文件夹

    fs.rmdir('./data', err => {
        console.log(err);
    })
    
  • 读取文件夹内容

    fs.readdir('./data/b', (err, data) => {
        console.log('err', err);
        console.log('data', data);
    })
    
  • 判断文件\文件夹是否存在

    fs.access('./dat', (err) => {
        if (err) {
            console.log('不存在');
        } else {
            console.log('存在');
        }
    })
    
  • 查看状态

    fs.stat('./data', (err, stats) => {
        console.log('是不是文件', stats.isFile());
        console.log('是不是文件夹', stats.isDirectory());
    })
    

path路径

  • 引入
  • 未完终端
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 的相关文章

随机推荐