nodejs中模块定义的介绍

这篇文章主要介绍了nodejs中模块定义方法,结合实例形式分析了nodejs模块的原理、常见模块及相应的定义方法,需要的朋友可以参考下

本文实例讲述了nodejs中模块定义方法。分享给大家供大家参考,具体如下:

1.模块定义

nodejs所谓的模块就是一个文件!一个.js文件就是一个nodejs的模块,模块与文件是一一对应的,那么引用模块就是require(‘文件路径’)。

如:

var circle = require('./circle.js');console.log( 'The area of a circle of radius 4 is '      + circle.area(4));

登录后复制

这个取名为foo.js

var PI = Math.PI;exports.area = function (r) { return PI * r * r;};exports.circumference = function (r) { return 2 * PI * r;};

登录后复制

这个取名为circle.js

两个js代码文件是放在同一个文件夹下的。

如果你要引用其它文件夹下的模块,直接写定路径。这里的路径格式和linux的路径格式一样:/../../.js  这是绝对路径,../.js 这个是上一层 ./.js 这个就是当前路径。

这里需要注意exports与module.exports的区别:exports其实只是module.exports的一个引用(就像a=2,b=a这样,b只是引用了a,当b=c的时候,b就不指向a了),这样就能明白官网上的意思了(如果你想要将exports的根声明为一个函数,或者你想生成一个object,那么就请用module.exports而不是exports)

2.循环引用

a.js:

console.log('a starting');exports.done = false;var b = require('./b.js');console.log('in a, b.done = %j', b.done);exports.done = true;console.log('a done');

登录后复制

b.js:

console.log('b starting');exports.done = false;var a = require('./a.js');console.log('in b, a.done = %j', a.done);exports.done = true;console.log('b done');

登录后复制

main.js:

console.log('main starting');var a = require('./a.js');var b = require('./b.js');console.log('in main, a.done=%j, b.done=%j', a.done, b.done);

登录后复制

看到没有,这个a.js与b.js两个相互引用了。这样会不会无限循环呢?不会的,这只是会有一个没有加载完毕,也就是有一个module一部分处于不可用状态。像这里,a.js先加载,但是在加载a.js的同时,a.js加载了b.js,此时a.js处于停滞状态,只是仅仅加载了require前面的数据,而对于b.js会一直加载完毕。下面是运行的结果:

$ node main.jsmain startinga startingb startingin b, a.done = falseb donein a, b.done = truea donein main, a.done=true, b.done=true

登录后复制

3.核心模块

所谓核心模块,其实就是nodejs开发的公共包,就像Java的公共包一样。访问核心模块只要require(‘文件名字’),这样就能访问到。其实公共模块包是放在了nodejs安装的node_modulespmlib下面。

4.文件模块

当没有精确匹配所谓的引用时,nodejs会先采用扩展名:.js, .json, and then .node. .js文件就是JavaScript文件,.json就会以json格式解析,.node就会以dlopen加载为一个附加的模块

这里还需要注意,当没有’/’、’./’这样的符号修饰时,模块加载的地方是在node_modules,至于这个文件在哪,请看下面。

5.node_modules文件夹

如果在引用模块时没有’/’ ‘../’ ‘./’这样的格式符号限定,那么其采用寻找的方式如下:假设你的文件在’/home/ry/projects/foo.js’,其引用了require(‘bar.js’),那么这个bar.js寻找方式如下:

/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js

也就是从当前路基开始,一步一步向父目录添加node_modules文件夹作为模块地址。

require(‘example-module/path/to/file’)这种引用和require(‘bar.js’)是一样的解析。

6.以文件夹名字引用模块

大致分为两种:1)写package.json文件,此文件写在项目的根目录下,其形式如下:

{ "name" : "some-library", "main" : "./lib/some-library.js" }

登录后复制

这样写出来的require(‘./some-library’)其真正的是

require('./some-library/lib/some-library.js')

登录后复制

2)直接约定好为index.js或index.node文件加载,同上的require,其加载可能如下:

./some-library/index.js
./some-library/index.node

7.缓存

一个模块的多次引用会只做一次加载。就像java中的static关键字修饰。不过要值得注意的是,当你require(‘foo’)这样的形式就不一定保证每次都会引用到相同的文件了(因为你可能会在不同的文件夹中引用)。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Node中cluster模块的学习

Node中cluster模块的学习

Node中cluster模块的学习

以上就是nodejs中模块定义的介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2636388.html

(0)
上一篇 2025年3月7日 05:03:55
下一篇 2025年3月2日 11:14:30

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 关于Node.js 子进程与应用的介绍

    这篇文章主要介绍了浅谈node.js 子进程与应用场景,内容挺不错的,现在分享给大家,也给大家做个参考。 背景 由于ons(阿里云 RocketMQ 包)基于 C艹 封装而来,不支持单一进程内实例化多个生产者与消费者,为了解决这一问题,使用…

    编程技术 2025年3月7日
    200
  • Node.js中如何合并两个复杂对象的介绍

    下面这篇文章主要给大家介绍了在node.js中如何合并两个复杂对象的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考,下面来一起看看吧。 前言 相信大家都知道在通常情况下,在Node.js中…

    编程技术 2025年3月7日
    200
  • 深入解析node.js的exports、module.exports与ES6的export、export default

    这篇文章主要给大家介绍了关于node.js中的exports、module.exports与es6中的export、export default到时是什么的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值…

    2025年3月7日
    200
  • 关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍

    本篇文章主要介绍了nodejs、npm安装配置步骤(windows版本) 以及环境变量详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1、windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows na…

    2025年3月7日 编程技术
    200
  • nodejs中实现路由功能的方法

    这篇文章主要介绍了nodejs中实现路由功能,顾名思义,路由指的就是我们要针对不同的url有不同的处理方式,本文将教你在node.js中实现路由功能,需要的朋友可以参考下 初学Node,发现了与自己之前的观点完全不同的场面——你眼中的Jav…

    2025年3月7日
    200
  • 关于nodejs开发环境的配置与使用

    这篇文章主要介绍了关于nodejs开发环境的配置与使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 经过几个星期的nodejs学习,从开始的小白到现在渐渐得熟悉,走过来也才算明白,现在已经入门也掌握了相关的学习方法,今天开…

    2025年3月7日 编程技术
    200
  • nodejs简单访问及操作mysql数据库的方法

    这篇文章主要介绍了nodejs简单访问及操作mysql数据库的方法,结合实例形式分析了nodejs创建mysql连接、执行sql语句及关闭连接等相关操作技巧,需要的朋友可以参考下 本文实例讲述了nodejs简单访问及操作mysql数据库的方…

    编程技术 2025年3月7日
    200
  • node.js启动后台运行forever的方法

    今天为大家分享一篇node.js部署之启动后台运行forever的方法,具有很好的参考价值,希望对大家有所帮助。 我们知道想要项目部署后运行 需要使用命令行 cd 到项目目录然后执行 npm install 登录后复制 或者 node in…

    编程技术 2025年3月7日
    200
  • Node.js中cluster模块的介绍

    这篇文章主要介绍了关于node.js中cluster模块的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 Node的单线程设计已经没法更充分的”压榨”机器性能了,Node新增了一个内置模块clus…

    2025年3月7日
    200
  • Vue2.0搭建Vue脚手架的方法

    这篇文章主要介绍了关于vue2.0搭建vue脚手架的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 介绍Vue.js是一套构建用户界面的渐进式框架。Vue 只关注视图层,采用自底向上增量开发的设计。Vue 的目标是通过尽…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论