首页
学习
活动
专区
圈层
工具
发布

node乞丐版require方法

在node环境中,每一个文件都是一个模块,解决了命名冲突的问题,node会默认给js加上一个函数,比如一个js文件打印this: console.log(this);//{} 并不是像浏览器一样,this...是window(node没有window,只有global),而是一个空对象,再打印arguments: '0': {}, '1': { [Function: require] '2':Module...的调试和过程分析,确定require方法引入的时候相当于一个自执行函数: (function (exports, require, module, __filename, __dirname) { })...path = require('path'); const vm = require('vm');//虚拟机,可以到node官网文档了解 //自定义的require方法 function myrequire.../j'); console.log(a); console.log(j); node的方法上千行,我这只是学习一下大概原理,可以拷贝代码运行,然后理解理解。 (完)

78620

Node.js的require函数原理

学习 Node.js ,必学如何使用 require 语句。本文通过源码分析,详细介绍 require 语句的内部运行机制,帮你理解 Node.js 的模块机制。...一、require() 的基本用法 分析源码之前,先介绍 require 语句的内部逻辑。如果你只想了解 require 的用法,只看这一段就够了。 下面的内容翻译自《Node使用手册》。...当 Node 遇到 require(X) 时,按下面的顺序处理。 (1)如果 X 是内置模块(比如 require(‘http’))    a. 返回该模块。    b. 不再继续执行。...当前脚本文件 /home/ry/projects/foo.js 执行了 require(‘bar’) ,这属于上面的第三种情况。Node 内部运行过程如下。...require 的源码在 Node 的 lib/module.js 文件。为了便于理解,本文引用的源码是简化过的,并且删除了原作者的注释。

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

    node中的require模块的加载规则

    require的加载规则require的加载规则:在Node.js中,使用require函数加载模块。...i node_modules),使用的时候就可以通过require('包名')来加载才可以使用 第三方包的名字不可能和核心模块的名字是一样的....实际上最终加载的还是文件 如果package.json不存在或者mian指定的入口模块不存在 则node会自动找该目录下的index.js 也就是说index.js是一个备选项,如果main没有指定.../index')('hello')总结和思考Node.js 中的模块是通过 require() 函数来加载的,require() 函数接受一个字符串参数,指定需要加载的模块名称。...总的来说,Node.js 中的 require() 函数通过模块名称来加载模块,具体的加载路径是根据模块名称的类型和当前模块所在的位置来计算的。

    74200

    Node.js 分享:require 加载器实现原理

    在大多数情况下我们会在浏览器中去运行javascript,有了node的出现,我们可以在node中去运行javascript,这意味着哪里安装了node或者浏览器,我们就可以在哪里运行javascript...1.node模块化的实现 node中是自带模块化机制的,每个文件就是一个单独的模块,并且它遵循的是CommonJS规范,也就是使用require的方式导入模块,通过module.export的方式导出模块...加载模块 require依赖node中的fs模块来加载模块文件,fs.readFile读取到的是一个字符串。...// 引入vm模块, 不需要安装,node 自建模块 const vm = require('vm'); const hello = 'yd'; const str = 'console.log(hello...3.require代码实现 介绍require代码实现之前先来回顾两个node模块的用法,因为下面会用得到。 path模块 用于处理文件路径。

    2.3K20

    Node.js 22 正式发布,支持 Require() ESM 模块!

    本周 Node.js 22 版本发布了!亮点包括 require() ES 模块、WebSocket 客户端、V8 JavaScript 引擎的更新等等!...由 Keyhan Vakil 贡献于 #51360 支持 require() 同步 ESM 图 此版本在 --experimental-require-module 标志下为同步 ESM 图添加了 require...如果启用了 --experimental-require-module,并且被 require() 加载的 ECMAScript 模块满足以下要求: 在最接近的 package.json 或 .mjs...require() 将会以 ES 模块的形式加载请求的模块,并返回模块名称空间对象。在这种情况下,它类似于动态 import(),但是是同步运行的,并直接返回名称空间对象。...我们打算在将来默认情况下启用 require(esm),而无需该标志。 详细可以看我之前这篇文章:CommonJS 和 ES Module 终于要互相兼容了???

    97910

    深入Node.js的模块加载机制,手写require函数

    .node:.node文件是C++编译后的二进制文件,纯前端一般很少接触这个类型。 手写require 前面其实我们已经将原理讲的七七八八了,下面来到我们的重头戏,自己实现一个require。...实现require其实就是实现整个Node.js的模块加载机制,我们再来理一下需要解决的问题: 通过传入的路径名找到对应的文件。...,其实最后调用的还是this.require // module不用说,就是this了 // __filename直接用传进来的filename参数了 // __dirname需要通过filename...循环引用 Node.js对于循环引用是进行了处理的,下面是官方例子: a.js: console.log('a 开始'); exports.done = false; const b = require...总结 require不是黑魔法,整个Node.js的模块加载机制都是JS实现的。

    1.5K51

    node系列:学会node调试

    前言 该文章来自于chh大佬的投稿,为他打call 为何需要node调试? 熟练使用node调试能让你在日常开发中更快的定位问题所在的代码,提高开发效率 如何进行node调试?...skipFiles:指定跳过单步调试的代码,"node_internals>/**"表示跳过node核心模块,因为是数组所以很明显可以添加选项: "skipFiles": [ "${workspaceFolder...}/node_modules/**/*.js", //跳过node_modules "node_internals>/**/*.js"//跳过node核心模块 ] program:指定调试入口文件地址...nodemon是一种node工具,通过在检测到目录中的文件更改时自动重新启动节点应用程序来帮助开发基于node.js的应用程序。...总而言之,我们修改node文件后,不用再每次node+文件名启动node文件,而只需通过nodemon命令启动一次,后面每次保存文件都会自动重启node文件。

    4.4K30

    Babel还是Node开发的“必需品”吗?

    毋庸置疑,Babel 曾经对构建和开发 Node.js 应用程序有过很大的影响,但随着 Node.js 的原生功能不断强大,Babel 或许也不再是 Node 开发的“必需品”。...因此随着越来越多的库迁移到“原生”JavaScript,你用不着再担心当不同的库打包不同的模块系统时如何处理 import 或 require 了。...如果有人正在使用你的软件包,想要确定问题是来自你的代码还是来自转换器注入的帮助程序就更复杂了。如果你的最终输出中注入的代码没那么多,你也能更好地理解正在构建的程序底层是怎样的结构。...最后,为什么你可能还是要用 Babel 呢 虽然 Node 已经进步了这么多,但有时你可能还是要用 Babel 才行。如果你想体验规范中“最新和最好的”那部分,那么 Babel 是你唯一的选择。...有时 Babel 的代码实际上比 Node 原生方法更快。通常来说这是源于 Node 维护者必须处理的一些边缘情况,这些情况 Babel 不一定要考虑。

    1.1K20

    Node

    一些资源 文档 Node.js 官方文档 Node.js 中文文档(非官方) 书籍 深入浅出 Node.js Node.js 权威指南 Node.js 实战 Node.js实战(第2季) github资源...举个例子: # 这里还是走国外的 npm 服务器,速度比较慢 npm install jquery # 使用 cnpm 就会通过淘宝的服务器来下载 jquery cnpm install jquery...那么我们在项目中应该使用 客户端渲染还是服务端渲染: 答:两者都用,根据数据的不同作用而定; 推举一个node开发时使用的小工具 nodemon npm install nodemon -g 安装成功后..., 但是我们也直观的发现了一个问题,和我们之前学习浏览器编程时JS, 差异还是很大的; 都是JavaScript编程, 为何有这种差异?...node的实现中,我们可以不指明模块路径;如: require('fs')、require('moment') ; 如果没有指明路径,那就是加载核心模块或第三方模块,指明加载路径一般就是加载自定义模块;

    12.1K31

    怎么升级node版本(node版本管理)

    爬坑后的结论:window系统升级node只能到node官网下载window安装包来覆盖之前的node。...以下为我的爬坑之路: 今天安装了vue cli 3,使用命令时报: You are using Node v8.4.0, but this version of vue-cli requires Node...Please upgrade your Node version. 然后再用node -v,发现在本地的node版本是v8.4.0,有点老了,要升级了。 可是,node怎么升级呢?有点慌。...作为一个开发者,我选择了稳定版本(我怕啊) 来看看效果 报错了,百度再查,github上说用n --stable就可以执行,那就再来 好像成功了,但感觉不对啊,执行node -v 还是之前那个版本...,继续百度,直到我看到这篇文章windows下更新Node 我知道我错了, 原来n模块是不支持window系统,window系统升级node就只有到node官网下载window安装包来覆盖之前的node

    4.1K10

    彻底搞懂 Node.js 中的 Require 机制(源码分析到手写实践)

    本文你能学到什么 自己手写实现一个 require,面试用也可以。 如何看 Node.js 源码 require 函数是如何产生的?为什么在 module 中可以直接使用。...require 加载原生模块时候如何处理的,为什么 require('net') 可以直接找到 Node.js 中 require 会出现循环引用问题吗? require 是同步还是异步的?为什么?...那部分内容放在 Node.js与 C++ 那些事的文章中介绍。 require 加载普通文件模块 require 加载 C++ 扩展文件模块 require 加载原理(源码分析与手写) ?...都是最终的导出结果 require 原理理解后的思考 require加载是同步还是异步 这个问题我直接告诉你同步还是异步,你可能过一阵又忘记了,我之前就是这样。...require 的源码中还是有很多细节点可以学习和分析的,比如这里忽略了 isMain 主文件判断,启动时候 require 的使用(这个会在另一篇文章 Node.js 的启动源码分析中介绍),以及在

    3.4K21
    领券