开启Nodejs之旅4 ---Module and Package

147 阅读2分钟
Node.js的模块和包机制的实现参照了CommonJS的标准,但并未完全遵循.
      我们曾经用到了var http = require('http'),其中http是Node.js的一个核心模块,其内部是用C++实现的,外部用JavaScript封装。我们通过require函数获取了这个模块,然后才能使用其中的对象。
    Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。

    创建一个module.js的文件

  // module.js

var name;
exports.setname=(myName)=>{  name=myName};
exports.sayHello =()=>{   console.log('Hello ' + name) }

//getmodule.js

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



Node.js的是一个目录,其中包含一个JSON格式的包说明文件package.json。

严格符合CommonJS规范的包应该具备以下特征:

   1.  package.json必须在包的顶层目录下;

   2. 二进制文件应该在bin目录下;

   3. JavaScript代码应该在lib目录下;

   4. 文档应该在doc目录下;

   5.单元测试应该在test目录下;

Node.js对包的要求并没有这么严格,只要顶层目录下有package.json,并符合一些规范

即可,当然为了提高兼容性,我们还是建议你在制作包的时候,严格遵守CommonJS规范.


安装包的时候分全局模式和本地模式,这两者到底区别在哪里呢?

全局模式安装:npm [install/i] -g [package_name]

本地模式安装:npm [install/i]  [package_name]

因为本地模式不会注册PATH环境变量

举例说明,我们安装supervisor是为了在命令行中运行它,譬如直接运行supervisor script.js,这时就需要在PATH环境变量中注册supervisor。npm本地模式仅仅是把包安装到node_modules子目录下,其中的bin目录没有包含在PATH环境变量中,不能直接在命令行中调用。而当我们使用全局模式安装时,npm会将包安装到系统目录,譬如
/usr/local/lib/node_modules/,同时package.json文件中bin字段包含的文件会被链接到
/usr/local/bin/。/usr/local/bin/是在PATH环境变量中默认定义的,因此就可以直接在命令中运行supervisor script.js命令了。


npm install-g express安装了express

$ npm link express
 ./node_modules/express -> /usr/local/lib/node_modules/express
我们可以在node_modules子目录中发现一个指向安装到全局的包的符号链接。通过这
种方法,我们就可以把全局包当本地包来使用了。

包的创建和发布

1.创建一个文件夹目录byvoidmodule

2. npm init

3.生成package.json文件

4.在package.json所在目录下运行npm publish,稍等片刻就可以完成发布