美文网首页
node.js模块加载机制

node.js模块加载机制

作者: 渚清与沙白 | 来源:发表于2023-10-08 11:22 被阅读0次

常用NPM命令

输入vim: 进入编辑模式,如 vim serve.js
键入i : 进入新增内容模式
键入Esc : 退出键入模式
键入 :wq 保存并退出vim编辑

  1. 导入模块:const module = require('module-name');

  2. 导出模块:module.exports = {};

  3. 执行js: node server.js

  4. 查看版本: node -v

  5. node版本升级: sudo npm install npm -g

  6. 安装模块: npm install 模块名 如 npm install express

  7. 全局安装: npm install express -g

  8. 本地安装: npm install express

  9. 查看全局安装模块: npm list -g

  10. 查看本地安装模块: npm list

  11. 查看模块版本号: npm list grunt

  12. 卸载模块: npm uninstall express

  13. 查看node_modules目录下是否存在卸载的包: npm ls

  14. 更新模块: npm update express

  15. 搜索模块:npm search express

  16. 创建模块: npm init

  17. 发布模块:npm publish

  18. 创建package.json文件: npm init -y

  19. 安装指定包,记录到devDependencies节点中
    npm install 包名 —save-dev 可简写成: npm I 包名 -D

  20. 查看当前下包镜像源:npm config get registry

  21. 切换到淘宝镜像源:npm config set registry=https://registrt.npm.taobao.org/

  22. nrm切换下包镜像源
    安装nrm: npm I nrm -g
    查看可用镜像源: nrm ls
    切换到淘宝镜像源: nrm use taobao

  23. 安装全局包:npm I 包名 -g

  24. 卸载全局包: npm uninstall 包名 -g

  25. 发布包
    发布到npm官方服务器
    从淘宝镜像服务器切换到npm官方服务器
    终端登录npm
    发布包到npm,切换到包的根目录发布

  26. 登录npm: npm login

  27. 发布包:npm publish

  28. 删除已发布的包: npm unpublish 包名 —force

  29. 查看插件版本号:npm view webpack version

  30. npm init -y 快速创建包

  31. npm i -S uniq npm i -save uniq 生产依赖

  32. npm i -D uniq npm i -save-d uniq 开发依赖

  33. npm i | npm install 安装所有的包

  34. npm i <包名@版本号> 安装指定版本号的包

  35. nom r [remove] uniq 删除依赖

  36. npm run serve 执行脚本 serve是指令的别名

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. nvm list available 显示所有可以下载的Node.js版本

  2. nvm install 12.16.1 安装指定Node.js版本

  3. nvm use 12.16.1 切换版本

  4. nvm list 显示已安装的Node.js版本

  5. nvm install latest 安装最新版本

  6. nvm uninstall 12.16.1 卸载指定版本

Node.js的模块

在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数

const fs = require("fs");

// 异步读取
fs.readFile('temp.txt',  (err, data) =>{
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('temp.txt');
console.log("同步读取: " + data.toString());

// 异步写入
fs.writeFile('temp.txt', '写入文件的内容',  (err)=> {
    if (err) {
        return console.error(err);
    }
    console.log("写入成功!");
 });

一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展

nodejs内置模块

在 Node.js 中,有四种主要的模块类型:

  1. 内置模块:这些是 Node.js 自带的模块,无需通过 npm 安装就可以直接使用。例如,fspatheventsBufferhttpurlutil等都是内置模块。
  2. 自定义模块:用户可以创建自己的模块,并在其他地方引用。在 Node.js 中,一个文件就是一个模块。你可以在一个文件中编写 JavaScript 代码,然后通过require 关键字在其他文件中引用这个模块。
  3. 第三方模块:这些是通过 npm 安装的模块。npm 是 Node.js 的包管理器,允许用户分享和重用代码。你可以通过 npm install 命令来安装你需要的模块。
  4. Node.js 的核心模块:这些是 Node.js 的核心部分,实现了 Node.js 的基础功能。例如,bufferstreamprocess等都是核心模块。这些模块在 Node.js 的源代码中可以找到,但不可以直接修改。
引入模块require

require方法接受以下几种参数的传递:

  • http、fs、path等:引入原生模块
  • ./:./mod或../mod,相对路径的自定义文件模块。
  • /: /pathtomodule/mod,绝对路径的自定义文件模块。
  • mod:非原生模块的文件模块,第三方模块
导出模块modules.exports
  1. modules.exports可以导出一个函数、对象等任意类型的数据
  2. exports仅仅是 module.exports 的一个引用,其实就是 module.exports = { }

如果要对外暴露属性或方法,就用exports就行,要暴露对象(类似class,包含了很多属性和方法),就用module.exports。不建议同时使用 exports 和 module.exports。

const date = require('./src/dateFormat');
const escape = require('./src/htmlEscape');
// 使用展开运算符,向外暴露date和escape的成员
module.exports = {
    ...date,
    ...escape
}
全局变量
  • JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量
  • 浏览器 JavaScript 中,通常window 是全局对象, 而 Node.js 中的全局对象是 global所有全局变量(除了 global 本身以外)都是 global 对象的属性
  • global 最根本的作用是作为全局变量的宿主,当你定义一个全局变量时,这个变量同时也会成为全局对象的属性
  1. __filename 表示当前文件的绝对路径
  2. __dirname 表示当前文件所处的文件目录绝对路径
  3. setTimeout(cb,ms)
  4. clearTimeout(t)
  5. setInterval(cb,ms)
  6. console
  7. process

模块的加载机制

优先从缓存中加载

模块在第一次加载后会被缓存。多次调用require()不会导致模块的代码被执行多次。所有模块加载均是优先加载缓存的,可以提高执行效率。

内置模块加载机制

内置模块是node.js官方提供的模块,加载的优先级最高

自定义模块加载机制

使用require加载自定义模块时,必须指定以./../开头的路径标识符,在加载自定义模块时,如果没有指定这样的标识符,node会把他当着内置模块或第三方模块进行加载。

加载模块省略模块扩展名,node.js会按顺序别分尝试加载。

  1. 按照确切的文件名进行加载
  2. 补全.js扩展名进行加载
  3. 补全.json扩展名进行加载
  4. 补全.node扩展名进行加载
  5. 加载失败,终端报错
第三方模块加载机制

第三方模块是指在node_modules目录下安装的模块。传递给require()的标识符不是一个内置模块,也没有以./../开头的路径标识符,则node会从当前模块的父目录开始,尝试从node_modules目录中加载模块。如果在父目录中也找不到,则会继续往上一级目录中寻找,直到文件系统的根目录

工具

nodemon 工具: 避免频繁关闭、启动服务器 代码发生改变自动重启服务器
nodemon app.js 启动服务器

相关文章

  • Node.js模块以及模块加载机制

    Node.js中的模块 在Node.js中,以模块为单位划分功能,通过一个完整的模块加载机制使得开发人员可以将应用...

  • Node.js 模块机制

    Node.js 模块机制 Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript...

  • node.js模块加载机制

  • Node.js模块化学习

    模块化的基本概念Node.js 中模块化npm与包模块的加载机制 模块化的基本概念 什么是模块化 模块化是指解决一...

  • node.js模块 --学习笔记

    模块 1.在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序...

  • ios 模版拼图视图组件分享

    在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制。 狭义的说,每一个JavaScri...

  • 深入NodeJS的模块机制

    Node.js 模块的实现 之前在网上查阅了许多介绍 Node.js 的文章,可惜对于 Node.js 的模块机制...

  • 《node.js权威指南》(二)模块与npm包管理工具

    在Node.js中,以模块为单位划分所有的功能,并且提供了一个完整的模块加载机制,所以我们可以将应用程序划分为各个...

  • ch04 模块与npm包管理工具

    在node.js中,以模块为单位划分所有功能,并提供了一个完整的模块加载机制,可以将应用程序划分为不同的部分,并且...

  • AMD

    AMD, Asynchronous Module Definition,即异步模块加载机制,它采用异步方式加载模块...

网友评论

      本文标题:node.js模块加载机制

      本文链接:https://www.haomeiwen.com/subject/bjhbbdtx.html