问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

nodejs 怎样在浏览器中运行

发布网友 发布时间:2022-04-22 04:02

我来回答

2个回答

懂视网 时间:2022-04-23 20:31

几乎所有的Node.js开发人员可以告诉你require()函数做什么,但我们又有多少人真正知道它是如何工作的?我们每天都使用它来加载库和模块,但它的行为,对于我们来说反而是一个谜。

出于好奇,我钻研了node的核心代码来找出在引擎下发生了什么事。但这并不是一个单一的功能,我在node的模块系统的找到了module.js。该文件包含一个令人惊讶的强大的且相对陌生的核心模块,控制每个文件的加载,编译和缓存。require() 它的横空出世,只是冰山的一角。

module.jsfunction Module(id, parent) {
 this.id = id;
 this.exports = {};
 this.parent = parent;
 // ...

在module.js在Node.js内部主要承担两个角色。首先,它为所有的Node.js模块提供了一个基础。每个文件是基本模块new出的一个新实例,即使在该文件已经运行之后,仍然存在。这就是为什么我们能够性为module.exports附加属并在需要时返回它们。

该模块的第二大任务是处理node的模块加载机制。我们使用的独立操作的“require”函数实际上是一个抽象概念的module.require,这本身就是只是一个简单的关于Module._load功能的封装。此load方法处理每个文件的实际加载,并在那里开始我们的旅程。

Module._load

Module._load = function(request, parent, isMain) {
 // 1. Check Module._cache for the cached module. 
 // 2. Create a new Module instance if cache is empty.
 // 3. Save it to the cache.
 // 4. Call module.load() with your the given filename.
 // This will call module.compile() after reading the file contents.
 // 5. If there was an error loading/parsing the file, 
 // delete the bad module from the cache
 // 6. return module.exports
};

Module._load负责加载新的模块和管理模块的缓存。缓存加载的每个模块减少冗余文件的读取次数,并可以显著地加快您应用程序的速度。此外,共享模块实例允许单例特性的模块,保持在项目中的状态。

如果某个模块没有在缓存中存在,Module._load将创建该文件的一个新的基本模块。然后,它会告诉模块在将它们发送到module._compile之前阅读新文件的内容。[1]

如果您注意到上面的步骤#6,你会看到module.exports已被返回给用户。这就是为什么当你在定义公共接口使用时,你使用exports和module.exports,因为Module._load将接下来返回require的内容。我很惊讶,这里没有更多的功能,但如果有的话那更好。

module._compile

Module.prototype._compile = function(content, filename) { // 1. Create the standalone require function that calls module.require. // 2. Attach other helper methods to require. // 3. Wraps the JS code in a function that provides our require, // module, etc. variables locally to the module scope. // 4. Run that function};

这是真正的奇迹发生的地方。首先,一个特殊的独立操作的require函数是为该模块创建的。这是我们需要的并且都熟悉的功能。而函数本身只是一个在Module.require的封装,它也包含了一些便于我们使用的鲜为人知的辅助方法:

· require():加载一个外部模块
· require.resolve():解析一个模块名到它的绝对路径
· require.main:主模块
· require.cache:所有缓存好的模块
· require.extensions:根据其扩展名,对于每个有效的文件类型可使用的编制方法
一旦require准备好了,整个加载的源代码就会被封装在一个新的函数里,可以接受require,module,exports和所有其他暴露的变量作为参数。这是一个仅仅为封装模块的而创建的函数,以便于在防止与Node.js的环境产生冲突。

(function (exports, require, module, __filename, __dirname) {
 // YOUR CODE INJECTED HERE!
});

该Module._compile方法是同步执行的,所以对Module._load的调用只能等到这段代码运行结束,并将module.exprts返回给用户。

结论

因此,我们已经了解了require的全部代码,并已经初步了解它是如何工作的。

如果你已经按照这一切的方式做了,那么你已经为最后的秘密做好准备:require(‘module’)。这是正确的,该模块系统本身可以通过模块系统被加载。盗梦空间。这可能听起来很奇怪,但它可以让用户空间同模块加载系统互动起来,并不需要钻研Node.js核心。受欢迎的模块都像这样被建立。[2]

如果您想了解更多,请自己查看module.js源代码。还有很多东西足够你头痛一段时间了。第一个可以告诉我什么是NODE_MODULE_CONTEXTS“以及它为什么被添加的人可以得到加分奖励 :)

[1] module._compile方法只用于运行JavaScript文件。 JSON文件需通过JSON.parse() 解析并返回

[2]然而,这两个模块都建立在私有模块的方法,如Module._resolveLookupPaths和Module._findPath。你可以认为这并没有好多了…

几乎所有的Node.js开发人员可以告诉你require()函数做什么,但我们又有多少人真正知道它是如何工作的?我们每天都使用它来加载库和模块,但它的行为,对于我们来说反而是一个谜。

出于好奇,我钻研了node的核心代码来找出在引擎下发生了什么事。但这并不是一个单一的功能,我在node的模块系统的找到了module.js。该文件包含一个令人惊讶的强大的且相对陌生的核心模块,控制每个文件的加载,编译和缓存。require() 它的横空出世,只是冰山的一角。

module.jsfunction Module(id, parent) {
 this.id = id;
 this.exports = {};
 this.parent = parent;
 // ...

在module.js在Node.js内部主要承担两个角色。首先,它为所有的Node.js模块提供了一个基础。每个文件是基本模块new出的一个新实例,即使在该文件已经运行之后,仍然存在。这就是为什么我们能够性为module.exports附加属并在需要时返回它们。

该模块的第二大任务是处理node的模块加载机制。我们使用的独立操作的“require”函数实际上是一个抽象概念的module.require,这本身就是只是一个简单的关于Module._load功能的封装。此load方法处理每个文件的实际加载,并在那里开始我们的旅程。

Module._load

Module._load = function(request, parent, isMain) {
 // 1. Check Module._cache for the cached module. 
 // 2. Create a new Module instance if cache is empty.
 // 3. Save it to the cache.
 // 4. Call module.load() with your the given filename.
 // This will call module.compile() after reading the file contents.
 // 5. If there was an error loading/parsing the file, 
 // delete the bad module from the cache
 // 6. return module.exports
};

Module._load负责加载新的模块和管理模块的缓存。缓存加载的每个模块减少冗余文件的读取次数,并可以显著地加快您应用程序的速度。此外,共享模块实例允许单例特性的模块,保持在项目中的状态。

如果某个模块没有在缓存中存在,Module._load将创建该文件的一个新的基本模块。然后,它会告诉模块在将它们发送到module._compile之前阅读新文件的内容。[1]

如果您注意到上面的步骤#6,你会看到module.exports已被返回给用户。这就是为什么当你在定义公共接口使用时,你使用exports和module.exports,因为Module._load将接下来返回require的内容。我很惊讶,这里没有更多的功能,但如果有的话那更好。

module._compile

Module.prototype._compile = function(content, filename) { // 1. Create the standalone require function that calls module.require. // 2. Attach other helper methods to require. // 3. Wraps the JS code in a function that provides our require, // module, etc. variables locally to the module scope. // 4. Run that function};

这是真正的奇迹发生的地方。首先,一个特殊的独立操作的require函数是为该模块创建的。这是我们需要的并且都熟悉的功能。而函数本身只是一个在Module.require的封装,它也包含了一些便于我们使用的鲜为人知的辅助方法:

· require():加载一个外部模块
· require.resolve():解析一个模块名到它的绝对路径
· require.main:主模块
· require.cache:所有缓存好的模块
· require.extensions:根据其扩展名,对于每个有效的文件类型可使用的编制方法
一旦require准备好了,整个加载的源代码就会被封装在一个新的函数里,可以接受require,module,exports和所有其他暴露的变量作为参数。这是一个仅仅为封装模块的而创建的函数,以便于在防止与Node.js的环境产生冲突。

(function (exports, require, module, __filename, __dirname) {
 // YOUR CODE INJECTED HERE!
});

该Module._compile方法是同步执行的,所以对Module._load的调用只能等到这段代码运行结束,并将module.exprts返回给用户。

结论

因此,我们已经了解了require的全部代码,并已经初步了解它是如何工作的。

如果你已经按照这一切的方式做了,那么你已经为最后的秘密做好准备:require(‘module’)。这是正确的,该模块系统本身可以通过模块系统被加载。盗梦空间。这可能听起来很奇怪,但它可以让用户空间同模块加载系统互动起来,并不需要钻研Node.js核心。受欢迎的模块都像这样被建立。[2]

如果您想了解更多,请自己查看module.js源代码。还有很多东西足够你头痛一段时间了。第一个可以告诉我什么是NODE_MODULE_CONTEXTS“以及它为什么被添加的人可以得到加分奖励 :)

[1] module._compile方法只用于运行JavaScript文件。 JSON文件需通过JSON.parse() 解析并返回

[2]然而,这两个模块都建立在私有模块的方法,如Module._resolveLookupPaths和Module._findPath。你可以认为这并没有好多了…

热心网友 时间:2022-04-23 17:39

在终端上运行mysqltest.js,它运行是脚本。它跟浏览器运行是不同的执行环境。虽然在运行在V8引擎(假设你用Chrome)上,执行环境和可用的库是不同的。
Node.js中,require()是一个功能,它被添加执行环境。当你在终端运行JS文件,在执行文件环境是包含require()的。

require()不是内置浏览器的功能。是Node.js特定的功能,所以你试图在浏览器上运行你的脚本(JS文件)时,将会得到地Uncaught ReferenceError: require is not defined地错误。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
...括号内为杂质),所选用的试剂(足量)及操作方法均正确的是... ...所含的杂质以及除去这些杂质选用的试剂或操作方法,正确的是( ) 物... 佳能相机wifi传图片到电脑怎样将canon相机上的图片通过wifi导入电脑 佳能无线连电脑预览画面怎样将canon相机上的图片通过wifi导入电脑 支票丢了可以补办吗啊 存的支票找不到了怎么办 ...的时候总是连贯不起来,就像在一个单词一个单词的念一样。 每当我看见那些人用英语很自然交谈的时候,我就觉得他们非常的酷,我 每当听到一个英语长句,我的脑袋就发懵,总是仅仅听到其中几个单词 天玑800U和骁龙765G处理器对比有多大差距? 哪有开网店培训的机构? 怎么用nodejs打开js格式文件 怎么用nodejs打开js格式文件 深圳市微网时代电子商务有限公司怎么样? nodeJs无法执行js文件? honor是什么牌子手机要多少钱 nodeJs无法执行js文件? 异地可以换身份证吗,需要什么材料? 如何安装node.js 以及编写运行第一个node.js程序 如何安装node.js 以及编写运行第一个node.js程序 深圳市久益电子商务有限公司怎么样? honor是什么手机 nodejs怎么运行我的源程序文件 nodejs怎么运行我的源程序文件 异地更换身份证去哪里办理 大家好:关于东莞和深圳什么地方有培训开网店的,... honor是什么牌子手机是如何刷机? 深圳市森鑫源职业培训学校的学校简介 异地身份证到期换证流程 深圳哪里有正规的电商培训班? nodejs 怎样在浏览器中运行 现在异地如何换身份证 中秋节,端午节,清明节的时间? nodejs怎么在指定文件夹下运行 nodejs怎么在指定文件夹下运行 中国的三大传统节日是哪3个? 命令模式运行nodejs文件 怎么输入 命令模式运行nodejs文件 怎么输入 ETP与ETF的区别?详细介绍一下什么是ETP 元宵节,中秋节和。端午节? nodejs 在 android 系统里面怎么运行 nodejs 在 android 系统里面怎么运行 人在外地身份证到期了怎么换证? 如何在sublime text3运行nodejs 中秋和端午的分别含义?? 异地换身份证去哪里办理 nodejs怎么在windows版本上进行启动 nodejs怎么在windows版本上进行启动 中秋节,清明节,端午节分别是什么时候? 端午节、中秋节、重阳节的源来
  • 焦点

最新推荐

猜你喜欢

热门推荐