首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

nodejs探秘:require加载模块原理及代码实现

module = { exports: {}, id } my_require.cache[id] = module //这里缓存很重要,除了加快加载速度外还能处理循环依赖...在匹配时候,首先在给定目录下匹配是否有.js文件, 如果没有,那么匹配/index.js文件,如果还不匹配, 那么nodejs读取<...代码还需要注意是,require采用了缓存功能,如果给定模块已经加载过了它就直接返回,这意味着无论模块在代码中被加载多少次,它实际上只加载了一次,以后每次遇到要requier它时候,nodejs都会从缓存中直接将其返回...,这样就能加快加载速度,这就类似于singleton模式,即使代码在多个地方加载同一个模块,他们实际上使用都是同一个对象。.../b’),这条语句执行时会执行判断 if (my_require.cache[id]),此时id对应’.

88710
您找到你想要的搜索结果了吗?
是的
没有找到

从零开始用Hexo-GithubPage搭建个人网站(保姆级)

下载点此处下载NodeJS注:下载后安装,安装过程除了安装路径外全默认,路径不能有中文默认情况下,我们利用 npm 包管理器用来安装依赖包时,包会默认存放在 C:\Users\用户名\AppData\Roaming...\node_cache"代码内地址可修改1.5 NodeJS检查在刚刚打开Git Bash或者cmd中,输入node -vnpm -v如果出现版本号即配置成功,如果没有,请搜索 NodeJS 环境变量接下来为了加快下载速度...图片问题5.1 较少图片使用相对路径保存到Hexo下即可,请使用主题加载功能加快加载速度,例如,在使用Typora时,点击文件-偏好设置-图像设置插入图片时复制到指定路径,并勾选下面的所有框...../assets/${filename}这样你剪贴板图片和网络粘贴图片复制到文章时会自动下载到Hexo/source/assets/文章名目录下,随着你文章一起发布到网页5.2 较多图片图片过多会减慢静态网页速度...,这样你剪贴板图片和网络粘贴图片复制到文章时会自动上传到图床访问网页时相当于在线访问你图片,可以加快静态网页访问速度

35310

模块解析机制_TypeScript笔记14

,因为index.js会被隐式地当作该目录下主模块 P.S.具体参考 NodeJS 文档:File Modules和Folders as Modules 而非相对模块引入会从node_modules里找.../package.json /node_modules/moduleB/index.js P.S.对于package.json,实际上是加载其main字段指向模块 P.S.关于 NodeJS 如何从node_modules...加载模块更多信息,见Loading from node_modules Folders TypeScript 仿 NodeJS 策略 (模块解析策略为"Node"时)TypeScript 也会模拟NodeJS...types字段指向模块 这个过程与 NodeJS 非常相似(先moduleB.js,再package.json,最后index.js),只是换上了 TypeScript 源文件后缀名 类似地,非相对模块引入也同样遵循...查找逻辑几乎一致,只是会额外地从node_modules/@types里寻找d.ts声明文件 三.附加模块解析标记 构建时会把.ts编译成.js,并从不同源位置把依赖拷贝到同一个输出位置。

1.7K30

用node撸一个简单爬虫

nodejs爬虫 一提起爬虫可能大家就会觉得很高大上,就会想起python.呵呵,我们今天偏偏就要颠覆大家认知,用node不到100行代码擼一个简单爬虫。天天python,我决定换下口味。...开发环境 nodejs vscode 热下身 Node.js内置fs模块就是文件系统模块,负责读写文件。...我先用node.js 读写文件 hello,world,新建为index.js // 加载fs const fs = require('fs'); // const path = require('path...环境安装 npm install cheerio npm install request 如果安装不了,换源cnpm 在nodejs中npm就是pythonpip cheerio是jquery核心功能一个快速灵活而又简洁实现...效果图 用nodejs爬虫好处就是速度快,python用上多线程下载速度能够比过nodejs,但是解析网页这种事python没有nodejs快,毕竟js原生就是为了写网页。

65120

教你从零写一个nodejs包,然后发布至npm源上

随着前端技术发展,现在前端体系基本离不开nodejs来构建,而nodejs强大背后,肯定是离不开其开放生态下所诞生开源库和包,今天主要谈谈这些开源库包一些知识。 ?...npm i 包名 由于npm默认去国外镜像上拉资源,速度很慢,如果你在国内可以使用cnpm,或者在~/目录下新加.npmrc文件,将国内镜像地址写入。...npm i -g cnpm cnpm i 包名 接下来看一下这些被安装包是如何被加载和使用。 ?...可以看到,npm i实质则是下载文件,将目标资源下载到了一个叫node_modules文件夹下,通常对于在本地文件,按照正常文件加载方式,应该是下面这种方式。...index.js进行测试。

2.8K20

云函数基础

云函数运行环境 目前腾讯云和阿里云均支持选择nodejs版本,有nodejs8、nodejs12两个选项,需要在云函数创建时设定,不可修改。...当一个云函数初次被触发时,其完整过程如下: 实例化计算实例 加载函数代码 启动 node 执行代码 函数被调用时,执行这些完整步骤过程一般称作冷启动, 冷启动耗时长于热启动,一般在1秒出头。...使用阿里云时会自动忽略最后一位,即代表年份一位在阿里云不生效 "config": "0 0 2 1 * * *" }], // 云函数Url化path部分,阿里云需要以.../http/开头 "path": "", "runtime": "" // nodejs版本,可选Nodejs8、Nodejs12,默认:Nodejs8 } } 云函数访问云数据库...,即不传dataType参数时会返回buffer类型数据,如需自动解析json格式返回结果,需要将dataType设置为"json" 前面提到,在云函数中我们几乎可以使用所有的nodejs库,那么当然也可以使用大家所熟悉

2K41

这里有一份Node.js入门指南和实践,请注意查收

node index.js --tips="hello nodejs" /* [ '/usr/local/bin/node', 'xxx/process/index.js', '--tips=...压缩 zlib 模块 在流传输过程中,为减少传输数据加快传输速度,往往会对流进行压缩。 HTTP 流就是如此,为提高网站响应速度,会在服务端进行压缩,客户端收到数据后再进行相应解压。...如,在 index.js加载同目录下 circle.js: // circle.js const PI = Math.PI exports.area = r => PI * r * r exports.circumference...路径解析 当加载文件模块使用'/'前缀时,则表示绝对路径。如,require('/home/null/index.js')会加载/home/null/index.js 文件。 而使用'....如,在 index.js 中 require('./circle')引用时,circle.js 必须在相同目录下才能加载成功。 当没有'/'或'.

3.6K30

Nodejs 中 ES Modules 使用入门讲解

删除标志也是将 ESM 变为稳定性而迈出重要一步,根据 Nodejs 官方发布说明,有望在今年下半年(10 月左右)删除 Nodejs 12 中警告,届时 Node 14 将会成为 LTS。...export 导出 export 用于对外输出模块,可导出常量、函数、文件等,相当于定义了对外接口,两种导出方式: export: 使用 export 方式导出,导入时要加上 {} 需预先知道要加载变量名...export default: 为模块指定默认输出,这样加载时就不需要知道所加载模块变量名,一个文件中仅可使用一次。...,而在本次版本发布取消了这个标志,本文也是对在 Nodejs 中使用 ES Modules 进行了入门讲解,后续也会进行更深入研究分享,希望看完你能有所收获。...Reference nodejs.org/en/blog/release/v12.17.0/ nodejs.org/dist/latest-v14.x/docs/api/esm.html

2.6K20

CommonJS

核心模块在NodeJS源码编译过程中,编译进了二进制文件,在进程启动时,部分核心模块就直接被加载进内存,这部分核心模块引入时,文件定位和编译执行这两个步骤可以省略掉,并且在路径分析过程中优先判断,所以这部分加载速度是最快...文件模块是在运行时动态加载,需要完整路径分析、文件定位、编译执行过程,速度比核心模块慢。...由于文件模块给NodeJS指明了确切文件位置,所以在查找过程中可以节约大量时间,其加载速度慢于核心模块。 自定义模块 自定义模块指的是非核心模块,也不是路径形式标识符。...在加载过程中,NodeJS会逐个尝试模块路径中路径,直到找到目标文件为止。可以看出,当前文件路径越深,模块查找耗时会越多,这也是自定义模块加载速度是最慢原因。...如果main属性指定文件名错误,或者压根没有package.json文件,NodeJS会将index当做默认文件名,然后依次查找index.js、index.json、index.node。

17210

【架构师(第十篇)】脚手架之注册命令及架构优化

封装通用 Command 和 Package 类 基于缓存 + Node 多进程实现动态命令加载和执行 将业务逻辑和脚手架逻辑彻底解耦 Node 多进程 child_process 源码分析 关键词...安装依赖 lerna add commander core/cli/ // core\cli\lib\index.js // 引入封装 init 命令 const init = require('@...,但是有以下问题 脚手架安装速度慢: 所有 package 都集成在 cli 里,因此当命令较多时,会减慢脚手架安装速度。...,要求我们能够动态加载 init 模块,这将增加架构复杂度,但大大提升脚手架可扩展性,将脚手架框架和业务逻辑解耦。...脚手架架构优化 当前脚手架执行流程如下图 优化后流程图如下 脚手架命令动态加载功能架构设计图

42130

深度阐述Nodejs模块机制

在Node启动时这些模块就被加载进内存中,所以核心模块引入时省去了文件定位和编译执行两个步骤,并且在路径分析中优先判断,因此核心模块加载速度是最快。文件模块则是在运行时动态加载速度比核心模块慢。...如果folder目录里没有包含package.json文件,Node会假设默认主文件为index.js,即会加载index.js。如果index.js也不存在, 那么加载将失败。...优先从缓存加载和浏览器会缓存静态js文件一样,Node也会对引入模块进行缓存,不同是,浏览器仅仅缓存文件,而nodejs缓存是编译和执行后对象(缓存内存) require()对相同模块二次加载一律采用缓存优先方式...因为Node执行是单线程,这是一个会引起性能问题地方。如果是.node或者·.json·文件可以加上扩展名加快一点速度。另一个诀窍是:同步配合缓存。...4 nodejs清除require缓存开发nodejs应用时会面临一个麻烦事情,就是修改了配置数据之后,必须重启服务器才能看到修改后结果。于是问题来了,挖掘机哪家强?噢,no! no! no!

57620

开放原子训练营(第一季)铜锁探密:基于铜锁,在前端对登录密码进行加密,实现隐私数据保密性

因此,我们还需要更新 nodejs 版本。...它意思是虽然 nodejs 新版本安装了,但是系统记住还是老版本 nodejs。...现在,在命令行中创建一个名为 webapp 文件夹: mkdir webapp 接着,进入到 webapp 文件夹中,通过 vim 命令创建并编辑 index.js 文件: vim index.js...此时会在命令行中打开 index.js,然后我们输入如下内容: 上述代码中,可以看到,我们使用 shelljs 来执行铜锁密码库 sm3 和 sm4 加密。...: node index.js 此时,你会发现命令行中输入了如下结果,表示我们成功借助铜锁密码库对用户登录密码进行了加密。

33020

Nodejs:ESModule和commonjs,傻傻分不清

久没有更新博客了,最近写nodejs脚本时候遇到了commonjs和ESModule问题,正好之前用得稀里糊涂,这次好好学习一下。...strict-mode 被引入模块都会以严格模式运行。 静态引入、动态引入 import x from这种语法有syntactic rigid,需要编译时置于顶部且无法做到动态引入加载。...模块导入导出实际是由nodejs模块封装器实现,通过为module.exports分配新值来实现导出具体内容。 module.exports有个简写变量exports,其实就是个引用复制。...(exports === module.exports) // true 注意,nodejs实际导出是module.exports,以下几种经典case单独看一下: case1 // ✅使用exports...时机 ES Module静态加载是编译时确定,ES Module动态加载是运行时确定。 CommonJS是运行时确定。

31520

nodejs+express+jade给我baby做个小相册

2.第一个hello world 新建一个nodejs项目: ? 运行一下提示找不到模块,这是因为少了express,jade,stylus三个模块。 ? 我们使用npm下载下来。...这里其实本来可以使用图形化npm来安装。只是最近npm服务器有点抽风,始终加载不进来,于是我直接使用npm命令来加载。...另外npm服务器有的时候很慢,可以切换到cnpm服务器上:npm set registry=http://r.cnpmjs.org/ 速度还行。 ? 再次运行一下,擦,还是报错。 ?...title= title link(rel='stylesheet', href='/stylesheets/style.css') body   block content 修改index.js...修改index.js 这个文件作用相当于asp.net mvc下controller,这里使用nodejs读取baby文件夹下image文件然后传递到index.jade视图上。

1.5K50

Webpack前端技术类文章

优势: 支持commonJS和AMD模块 支持很多模块加载调用,可以使模块加载器灵活定制,比如babel-loader加载器,该加载器能使我们使用ES6语法来编写代码 可以通过配置打包成多个文件,...module.exports = { // __dirname是nodejs一个全局变量 // 它指向是我们项目的根目录 // 入口文件位置 entry: __dirname +...port 设置默认监听端口,如果省略,默认为“8080” inline 设置为true,当源文件改变时会自动刷新页面 colors 设置为true,使终端输出文件为彩色 historyApiFallback...将存在依赖关系模块按照特定规则合并为单个JS文件,一次全部加载进页面中。 在页面初始时加载一个入口模块,其他模块异步地进行加载。.../addjs.js'); const num = addFun.add() require模块是第一次被加载,这时会首先执行该模块,然后导出内容。

1.5K30
领券