深入出不来Node module模块
在开发复杂Web应用的时候,通常需要把各个功能进行拆分、封装到不同的文件并在需要的时候引用该文件,即进行代码的模块化管理。几乎所有的编程语言都有自己的模块组织方式,比如Java中的包、C#中的程序集,而Node采用CommonJS模块规范。
模块规范
CommonJS旨在将运行在浏览器之外的JS进行标准化,并已经解决了大量的JS问题(如全局命名冲突)。Node对CommonJS的实现中,每个模块都会被封装在一个单独的JS文件中,即一个文件就是一个模块,而文件路径就是模块名。在编写每个模块时,都有以下三个预定义好的变量可供使用: require()
该函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。模块名可以使用相对路径(以./开头),也可以使用绝对路径(以/或C: 之类的盘符开头)。另外,模块名中的.js 扩展名是可以省略的,此时Node会寻找同名的文件夹,如果找不到,则寻找同名的js文件。还可以使用该函数加载和使用一个JSON文件,但此时.json 扩展名不可省略。 exports
该对象是当前模块的导出对象,用于导出模块公有方法和属性,默认为一个空对象{}。别的模块通过require()函数使用当前模块时得到的就是当前模块的exports对象。以下代码中导出了一个公有方法:
exports.hello = function() { console.log("Hello World!"); };//欢迎加入全栈开发交流圈一起学习交流:864305860
module
该对象用于提供当前模块的元数据等相关信息,但用途最多的是使用其exports属性替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,可以使用以下方式使其变成一个函数:
module.exports = function() { console.log("Hello World!"); };
注意:当使用以上方式时,对exports对象的所有修改都将被忽略!
模块初始化
一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存起来的导出对象被重复利用。 在test.js定义一个模块
//定义私有变量 var name = ""; function setName(n) { name = n; } function logName() { console.log(name); }//欢迎加入全栈开发交流圈一起学习交流:864305860 //帮助突破技术瓶颈,提升思维能力 //导出公有方法 exports.setName = setName; exports.logName = logName;
在main中加载test模块
//加载test模块 var test1 = require("./test.js"), test2 = require("./test.js"); //使用test1 test1.setName("Neo"); //欢迎加入全栈开发交流圈一起学习交流:864305860 //使用test2 test2.logName(); //Neo
可见,无论调用多少次require() ,对于同一个模块只加载一次,引用多次获取的其实是相同的实例。 主模块 通过命令行参数传递给Node以启动程序的模块称为主模块,主模块负责调度组成整个应用程序的其他模块协同工作。例如通过以下命令行启动程序时,main.js 就是主模块:
$ node main.js
二进制模块 Node除了可以使用JS编写模块,也支持使用C/C++编写二进制模块,编译好的二进制模块除了文件扩展名是.node外,和JS模块的使用方式相同。虽然二进制模块能使用操作系统提供的所有功能,但难以跨平台使用。 结语
感谢您的观看,如有不足之处,欢迎批评指正。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Google Java 代码规范
1. 简介 本文档用于Java编程语言的Google源代码编码标准的完整定义。Java源文件定义为Google风格。 于其他编程风格指南一样,所涉及的问题不止包含代码格式美化,还包括其他类型的约定或者编码标准。 但是本文档主要关注普遍遵循的严格规则,并避免提供意义不明的可执行建议(无论任何方式)。 1.1. 术语说明 本文件中除非另有说明: class包含用于表示普通类、枚举、接口或注解类型(@interface) 成员用于表示嵌套类、字段、方法或构造方法,也就是说除了初始设定和注释的顶级内容 注释总是实现注释,我们不使用短语“文档注释”,而是使用常规术语javadoc 其他术语说明会在整个文件中偶尔出现 译者注:嵌套类即内部类 1.2. 规范说明 本文档中的示例代码是非规范的。也就是说虽然示例是Google风格,但它们可能没有说明代码的唯一方式。 示例中的可选格式也不应作为规则强制执行。 2. 源文件基础 2.1. 文件名 源文件名包含顶级类并区分大小写(并且只有一个),加上.java扩展名。 2.2. 文件编码 源码文件编码必须是 UTF-8 译者注:因为不同操作系统默认的换行符不...
- 下一篇
教你如何在Angular中使用better-scroll插件
本文主要介绍了Angular中使用better-scroll插件的方法,小编觉得挺不错的,现在分享给大家。 better-scroll的使用 由于需要在一个固定的的高度做无限滚动,本来css的overflow-y也可以完成的,奈何安卓不是很流畅,还很生硬,就是用了第三方库better-scroll,配合angular的ng-content。angular的ng-content和vue的插槽很像,里面一些不确定的内容可以通过ng-content投影进去。 安装better-scroll 1: npm install better-scroll --save 2: 安装types npm install better-scroll @types/better-scroll --save 3:在angular-cli里面引入 listscroll组件的编写 根据官方的文档可以看出,better-scroll对dom的结构是有要求的,最外层的wrapper那一层是需要固定高度的,里面那一层content是根据内容的高度来撑起的。 html部分: <div class="scroll" #...
相关文章
文章评论
共有0条评论来说两句吧...