node.js模块加载机制

常用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 启动服务器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • NODE.JS 什么是node.js? Node.js® is a JavaScript runtime(运行时、...
    渣一窝阅读 499评论 0 1
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,472评论 1 37
  • 一、nrm 安装 参考地址:https://www.cnblogs.com/wangmeijian/p/70720...
    满天繁星_28c5阅读 935评论 0 1
  • 技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1....
    CurryCoder阅读 359评论 0 4
  • 一 .Node.js 基础 目录 Node开发概述Node运行环境搭建Node.js快速入门 1. Node开发概...
    风衫码农阅读 810评论 0 2