前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nodejs中模块的创建与引用

Nodejs中模块的创建与引用

作者头像
前端_AWhile
发布2019-08-29 13:09:22
1.4K0
发布2019-08-29 13:09:22
举报
文章被收录于专栏:前端一会

nodejs中,模块的概念很重要。所有功能都是基于模块划分的。每个模块都是JavaScript脚本,核心模块中主要是由js写成,部分是由C/C++编写,内建模块多是由C/C++编写。

这些模块的调用遵循CommonJS规范。

使用require()加载模块文件,参数值是字符串,如非nodejs自有模块,需要指定模块文件的完整路径及文件名。可以使用相对路径./或绝对路径/

代码语言:javascript
复制
// count.js  count模块文件
function count( a, b ) {
    return a*2 + b;
}
module.exports = {
    count
}

// app.js 业务代码文件
const countModule = require( "./count" );
let res = countModule.count( 10, 2 );
console.log( res );     // 22

如果count模块文件不存在,require()函数会将抛出一个异常。

通常在模块内部定义的本地就是、函数或对象只能在该模块内部访问,但当需要从模块外部引用这些变量、函数或对象时,需要用到代表当前模块文件的module对象的exports属性,这个module.exports属性就是模块的对象接口。换句话说,加载某个模块,其实就是加载该模块的module.exports属性。弄明白这个,就可以将需要被在模块外引用的变量、函数和对象放在module.exports属性的值中。

代码语言:javascript
复制
// some.js 模块文件
module.exports = {
    someValName: someVal,
    someFnName : someFn,
    someObjName: someObj
}

// app.js  调用some模块的文件,假设与some.js共在一个目录下
let some = require( "./some.js" );
console.log( some.someValName );

module.exports属性的值可以是一个对象,也可以是一个类(其实就是构造函数啦)。当模块输出了一个类,那可以干的事也非常多,比如类静态方法、静态变量、成员方法、成员变量…

代码语言:javascript
复制
// Foo模块文件  foo.js
function Foo( name, age ){
    this.name = name;
    this.age = age;
}

Foo.prototype.getName = function () {
    return this.name;
}
Foo.prototype.setName = function ( newName ) {
    this.name = newName;
}
Foo.prototype.getAge = function () {
    return this.age;
}
Foo.prototype.setAge = function ( newAge ) {
    this.age = newAge;
}
module.exports = Foo;

// 业务文件  app.js
const Foo = require( "./foo" );

let foo = new Foo( "nitx", 31 );
console.log( foo.getName() );       // nitx
console.log( foo.getAge() );        // 31

foo.setName( "sxm" );
foo.setAge( "32" );

console.log( foo.getName() );       // sxm
console.log( foo.getAge() );        // 32

上面两个示例都是属于第三方模块,引用时需要指定文件路径,如果不想指定文件路径,而直接引用文件名,如nodejs核心模块引用那样require( "http" ),则需要将模块文件放到node_modules目录下。这种方式管理模块更为灵活方便,可以在node_modules目录下新建一个使用该模块命名的目录,再将该模块文件放置在这个子目录下,并将模块文件重命名为index.js即可,应用程序根目录下的node_modules子目录的foo目录下的index.js将被正确加载。

参考资料:

1. 《Node.js》权威指南 - 第4章 模块与npm包管理工具 2. 前端模块化详解(完整版):https://juejin.im/post/5c17ad756fb9a049ff4e0a62

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档