sunnyxujian's blog sunnyxujian's blog
首页
  • JavaScript
  • CSS
  • HTML和浏览器
  • Vue
  • Vue3
  • React
  • 基础知识
  • webpack
  • rollup
  • vite
  • 其他
  • Nodejs
  • 网络
  • TypeScript
  • 架构设计
  • 性能优化
  • 数据结构和算法
  • JavaScript教程 笔记
  • ES6 教程 笔记
  • TypeScript 从零实现 axios
  • Git学习 笔记
  • 渲染器原理
  • TypeScript 笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网站
  • 资源
  • Vue资源
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 友链
  • 关于
GitHub (opens new window)

xujian

劝君惜取少年时。
首页
  • JavaScript
  • CSS
  • HTML和浏览器
  • Vue
  • Vue3
  • React
  • 基础知识
  • webpack
  • rollup
  • vite
  • 其他
  • Nodejs
  • 网络
  • TypeScript
  • 架构设计
  • 性能优化
  • 数据结构和算法
  • JavaScript教程 笔记
  • ES6 教程 笔记
  • TypeScript 从零实现 axios
  • Git学习 笔记
  • 渲染器原理
  • TypeScript 笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网站
  • 资源
  • Vue资源
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 友链
  • 关于
GitHub (opens new window)
  • Nodejs

    • JS模块化历程
    • node模块和文件加载的规则
      • 1. JS模块化方面的不足
      • 2. CommonJS规范
      • 3. Node中的CommonJS
      • 4. 模块分类
        • 4.1 原生模块
        • 4.2 文件模块
        • 4.3 第三方模块
        • 4.4 模块的加载策略
        • 4.5 文件模块查找规则
      • 5. 从模块外部访问模块内的成员
      • 6. 模块对象的属性
      • 7. 包
      • 8 其他参考
    • 用原生node模块实现http-server插件
    • nodejs递归读取所有文件
  • 网络

  • TypeScript

  • 架构设计

  • 性能优化

  • 数据结构和算法

  • 进阶
  • Nodejs
xujian
2021-06-12

node模块和文件加载的规则

# 1. JS模块化方面的不足

  • JS没有模块系统,不支持封闭的作用域和依赖管理
  • 没有标准库,没有文件系统和IO流API
  • 也没有包管理系统

# 2. CommonJS规范

  • 封装功能
  • 封闭作用域
  • 可能解决依赖问题
  • 工作效率更高,重构方便

# 3. Node中的CommonJS

  • 在node.js 里,模块划分所有的功能,每个JS都是一个模块

  • 实现require方法,NPM实现了模块的自动加载和安装依赖

    (function(exports,require,module,__filename,__dirname){
      exports = module.exports={}
      exports.name = 'zfpx';
      exports = {name:'zfpx'};
      return module.exports;
    })
    
    1
    2
    3
    4
    5
    6

# 4. 模块分类

# 4.1 原生模块

http path fs util events 编译成二进制,加载速度最快,原来模块通过名称来加载

# 4.2 文件模块

在硬盘的某个位置,加载速度非常慢,文件模块通过名称或路径来加载 文件模块的后缀有三种

  • 后缀名为.js的JavaScript脚本文件,需要先读入内存再运行

  • 后缀名为.json的JSON文件,fs 读入内存 转化成JSON对象

  • 后缀名为.node的经过编译后的二进制C/C++扩展模块文件,可以直接使用

    一般自己写的通过路径来加载,别人写的通过名称去当前目录或全局的node_modules下面去找

# 4.3 第三方模块

  • 如果require函数只指定名称则视为从node_modules下面加载文件,这样的话你可以移动模块而不需要修改引用的模块路径
  • 第三方模块的查询路径包括module.paths和全局目录

# 4.3.1 . 全局目录

window如果在环境变量中设置了NODE_PATH变量,并将变量设置为一个有效的磁盘目录,require在本地找不到此模块时向在此目录下找这个模块。 UNIX操作系统中会从 $HOME/.node_modules $HOME/.node_libraries目录下寻找

# 4.4 模块的加载策略

lookmodule

# 4.5 文件模块查找规则

lookmodule

# 5. 从模块外部访问模块内的成员

  • 使用exports对象
  • 使用module.exports导出引用类型

# 6. 模块对象的属性

  • module.id
  • module.filename
  • module.loaded
  • module.parent
  • module.children
  • module.paths

# 7. 包

在Node.js中,可以通过包来对一组具有相互依赖关系的模块进行统一管理,通过包可以把某个独立功能封装起来 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境

项目 描述
name 项目名称
version 版本号
description 项目描述
keywords: {Array} 关键词,便于用户搜索到我们的项目
homepage 项目url主页
bugs 项目问题反馈的Url或email配置
license 项目许可证
author,contributors 作者和贡献者
main 主文件
bin 项目用到的可执行文件配置
repository 项目代码存放地方
scripts 声明一系列npm脚本指令
dependencies 项目在生产环境中依赖的包
devDependencies 项目在生产环境中依赖的包
peerDependencies 应用运行依赖的宿主包

# 8 其他参考

npmjs package.json (opens new window)
ruanyifeng package.json (opens new window)

编辑 (opens new window)
上次更新: 2022/05/23, 15:08:15
JS模块化历程
用原生node模块实现http-server插件

← JS模块化历程 用原生node模块实现http-server插件→

最近更新
01
😍Vue3和React都在用的函数式编程,学起来~
02-03
02
链表
11-24
03
基础类型
11-18
更多文章>
Theme by Vdoing | Copyright © 2020-2023 xujian | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式