NodeJs的包

1.创建以及加载模块

1.创建模块

在Node.js中,创建一个模块非常简单,因为一个文件就是一个模块。

//module.js
var name;
exports.setName=function(thyName){
    name=thyName;
};
exports.setHello=function(){
    console.log('Hello '+name);
};
//getmodule.js
    var myModule=require('./module')
    myModule.setName("BYVoid");
    myModule.sayHello();

module.js通过exports对象把setName和sayHello作为模块的访问接口,在getmodule.js中通过require(‘./module’)加载这个模块,然后就可以访问module.js中exports对象的成员函数

单次加载

require不会重复加载模块
无论调用多少次require,获得的模块都是同一个

var hello1=require('./module');
hello1.setName('BYVoid');

var hello2=require('./module');
hello2.setName('BYVoid 2');

hello1.sayHello();

运行结果是Hello BYVoid2,因为hello1和hello2指向的是同一个实例。

覆盖exports

有时候我们希望把一个对象封装到模块中

//singleobject.js
function Hello(){
    var name;
    this.setName=function(thyName){
        name=thyName;
    };
    this.setHello=function(){
        console.log('Hello'+name);
    };
}
exports.Hello=Hello;

我们需要在其他文件中require(‘./singleobject’.Hello)来获取Hello对象。
如果是module.exports=Hello;就可以直接获得这个对象。

//gethello.js
var Hello=require('./hello');
hello =new Hello();
hello.setName('BYVoid');
hello.sayHello();

唯一变化是使用module.exports=Hello代替了exports.Hello=Hello。在外部引用该模块时,其接口对象就是要输出Hello对象本身,而不是exports。

2.创建包

包是在模块基础上更深一步的抽象。Node.js的包类似于C/C++的函数库或者Java/.Net的类库。它将某个独立功能封装起来,用于发布、更新、依赖管理和版本控制。

  • CommonJs规范
  • package.json位于顶层目录下
  • 二进制文件在bin目录下
  • Js代码在lib目录下
  • 文档在doc目录下
  • 单元测试在test目录下

2.1作为文件夹的模块

模块与文件是一一对应的。文件不仅可以是Js代码或者二进制代码,还可以是一个文件夹。最简单的包就是一个作为文件夹的模块。

//somepackage/index.js
exports.hello=function () {
    console.log('Hello');
}
//getpackage.js
    var someoackage=require('./somepackage');
    someoackage.hello();

node getpackage.js //Hello
把文件夹封装为一个模块,即所谓的包。包通常是一些模块的集合,在模块基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。通过定制package.json我们可以创建更复杂、更完善、更符合规范的包用于发布。

package.json

node.js在调用某个包的时候,会检查包中package.json文件的main字段,将其作为包的接口模块,如果package.json或main不存在,则以index.js或者index.node作为包的接口。

  • name
  • description
  • version
  • keywords
  • maintainers
  • contributors
  • bugs
  • licenses
  • repositories
  • dependencies
  • 如“dependencies”:{
        "webkit":"1.2"
        "ssl":{
            "gnutls":["1.0","2.0"],
            "openssl":"0.9.8"
        }
    }

    本地模式和全局模式

    npm默认在http://npmjs.org搜索或者下载包,安装到当前目录的node_modules子目录下。

    本地模式下不会注册PATH环境变量,如安装supervisor是为了在命令行中直接使用它。npm本地模式仅仅是把包安装到node_modules下,其中bin目录没有包含在PATH环境变量中。全局安装下,package.json文件中bin字段包含的 文件会被链接到/usr/local/bin

    创建全局链接

    全局安装的包不能直接通过require使用,但是通过npm link命令可以打破这一限制。
    如我们npm install -g express 全局安装了express,这时候在工程的目录下运行命令:
    npm link express
    会发现./node_module/express->/usr/local/lib/node_modules/express

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值