大家好,关于深入解析:Node.js的安装与模块加载原理很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
console.log(全局.a); //undefined 这是因为a是模块下定义的变量,不是全局变量
(i)全局变量和什么是模块
在NODE里面全局变量不是window了而是global
一个文件就是一个模块,同时每个模块都有自己的作用域.
我们用var声明的变量并不是全局的而是属于当前模块下面的
var a=100;
控制台.log(a); //100
全局.a=200;
控制台.log(a); //还是100
console.log(global.a) //是200
一些看似全局其实属于当前模块的变量
__filename 解析后当前文件的绝对路径。其实这个变量是属于当前模块的(也就是属于各个文件的)
控制台.log(__文件名);
(ii)模块加载机制-require方法
require("模块路径");
需要("./2.js");
require方法中的路径可以填写相对路径和绝对路径
当前模块在硬盘中的绝对路径
require("D:phpStudyWWWNodeindex.js"); //没问题(绝对路径) require("./2.js") ;这里一定要注意,不能写成require("2.js"),因为它会加载Node的核心模块,即,从node_models中找到它。因此,如果加载自己编写的模块,必须找到父目录,然后获取同级目录。
模块的文件查找机制:
首先根据加载的模块文件名进行搜索——如果没有找到,js文件会自动添加到模块文件名中进行搜索。如果还没有找到,则会在文件名中添加.json后缀进行搜索。如果没有找到,则会在文件名中添加.node后缀进行搜索。如果没有找到,会直接弹出错误。
模块之间想调用变量怎么办?
模块中var定义的变量的作用域是当前模块,不能被外部模块直接访问。如果一个模块访问另一个模块定义的变量,有两种方法: 方法:(不推荐) 使用该变量作为全局对象的属性,使其成为全局变量。当前模块是4(4.js)
为模块5中的全局对象添加属性global.a=100;
需要("./5.js");
控制台.log(a); //100 方法二: 使用一个模块对象module 对象(也在模块范围内,不是全局的) module 来保存并提供一些与当前模块相关的信息(可以使用console.log(module))打印出来。模块对象中有一个子对象,就是exports。我们可以使用这个对象来提供对模块中局部变量对象的外部访问。模块5
var a=100;
module.exports.a=a;
模块4
//require("./5.js") 返回值是加载模块中的exports
var m5=require("./5.js");
控制台.log(m5.a); //100;
exports与module.exports区别
导出用于变量,该方法不需要使用新对象。
module.exports.applies 到新的对象。这样,一个新的加载页面就可以创建一个新的对象。
var People=require("./People.js");
var xiaoming=new People("小明");
console.log(xiaoming.name);在模块作用域中,还有一个内置的模块对象——exports——其实就是module.exports5模块
变量a=100;
console.log(module.exports===导出); //真的;
出口.a=a; Exports 和module.exorts 指向同一点。使用时尽量不要破坏两者的指向关系。模块.exports=[1,2,3]; //像这样直接操作module.exports。此时exports与module.exports的指向关系已经断开。
【深入解析:Node.js的安装与模块加载原理】相关文章:
用户评论
终于决定学习 Node.js 了,这篇正好可以帮到我!
有18位网友表示赞同!
Node.js 安装挺简单的,但是模块加载确实有点难懂啊
有15位网友表示赞同!
以前用的只有前端 JS,现在想深入一点试试后端开发 。
有7位网友表示赞同!
感觉学习 Node.js 真是一条通往后端开发的大门!
有16位网友表示赞同!
这篇文章是不是讲的是 npm 的安装和使用呢?
有19位网友表示赞同!
我一直对 Node.js 模块加载机制很好奇,今天来了解一下!
有8位网友表示赞同!
希望这篇文章能详细解释下 CommonJS 和 ESM 的区别!
有7位网友表示赞同!
看了眼 GitHub 回顾下 Npm 也有很多贡献啊!
有14位网友表示赞同!
要学习 Node.js 就得掌握模块加载机制,太重要了 !
有13位网友表示赞同!
Node.js 是个好用的工具,但是安装和配置总是把我难住了
有6位网友表示赞同!
之前用过一些前端框架,现在想试试看纯 Node.js 开发 。
有10位网友表示赞同!
这篇文章的标题真是点明主题了,很清晰!
有13位网友表示赞同!
想搭建一个后端 API,Node.js 是个不错的选择啊!
有13位网友表示赞同!
希望能看到关于安装不同版本的Node.js 的经验分享!
有6位网友表示赞同!
学习新的编程语言总是让人兴奋!
有13位网友表示赞同!
感觉 Node.js 很适合快速开发小型应用 。
有17位网友表示赞同!
之前一直用 PHP 编写后端程序,现在想尝试 Node.js
有6位网友表示赞同!
看看这篇文章能否帮我解决 Node.js 模块冲突的问题!
有16位网友表示赞同!
学习Node.js 的一个好起点!
有6位网友表示赞同!