Node.js模块、包的学习笔记
来源:互联网 发布:疾病基因数据库 编辑:程序博客网 时间:2024/05/13 14:46
什么是模块
模块是node应用程序的基本组成部分,文件和模块是一一对应的,就是说,一个node文件就是一个模块,这个文件可能是javascript代码、json或者是编译过的c++扩展等,如:
var http = require('http');
其中http是node的一个核心模块,内部是c++实现的,外部是javascript封装起来的。我们通过require函数获取这个模块,然后才能使用其中的对象。
创建模块
在node中,一个文件就是一个模块,所以我们应该关注的问题是如何在其他的文件中获得这个模块。nodeJs提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。
例子://name.jsvar name;exports.setName = function(thyName){ name = thyName;};exports.sayHello = function(){ console.log('Hello' + name);};//getname.jsvar myName = require('./hellonode');myName.setName('yehui');myName.sayHello();
运行getname结果为:hello yehui
单次加载
require不会重复加载模块,无论调用多少次require,获得的模块都是同一个。var hello1 = require('./hellonode');hello1.setName('byyehui');var hello2 = require('./hellonode');hello2.setName('byyehui 2');hello1.sayHello();//by yehui 2
这是因为hello1 和hello2 都指向同一个函数,后面的结果就覆盖了前面一个。
覆盖exports
function Hello(){ var name; this.setName = function(thyname){ name = thyname; }; this.sayHello = function(){ console.log('hello' + name); };};exports.Hello = Hello;//调用var Hello = require('./singleObject').Hello;hello = new Hello();hello.setName('yehui');hello.sayHello();
这样的话,我们在其他文件里面就需要通过require(”).Hello来获取Hello对象。
但是如果我们把
exports.Hello = Hello;//换成 module.exports = Hello;
就可以直接用了
var Hello = require('./singleObject');hello = new Hello();hello.setName('yehui');hello.sayHello();
在外部引用模板时,其接口对象就是要输出Hello对象本身,而不是原先的exports。
创建包
包是在模块基础上更深一步的抽象,他将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制,node根据common JS规范实现了包机制,开发了npm来解决包的发布和获取需求。
- node.js的包是一个目录,其中包含一个JSON格式的包说明文件package.json。严格符合commonJS的包规范应该具备以下特征:
- package.json必须在包的顶层目录;
- 二进制文件应该在bin目录下;
- javascript代码应该在lib目录下;
- 文档应该在doc目录下
- 单元测试应该在test目录下。
但是node对包没那么严格,只需要package.json在顶层目录,并符合一些规则就行了。但是为了提高兼容性,还是严格一点较好。
作为文件夹的模块
模块和文件是一一对应的,文件不仅可以是javascript代码、二进制代码,还可以是一个文件夹。最简单的包就是一个作为文件夹的模块。如:我们先建一个nodelianxi的文件夹,在其中创建一个index.js:exports.hello = function(){ console.log('hello .');};
然后在文件夹外面建立一个getpackage.js
var nodelianxi = require('./nodelianxi');nodelianxi.hello();//hello .
在这里我们可以把文件夹封装成模块,即所谓的包。包通常是一些模块的集合,在模块的基础上提供了更高曾的抽象,相当于提供了一个固定接口的函数库。
package.json
package.json文件大概:{ "main" : "./lib/inter.js"}
node在调用包的时候,会首先检查包中package.json文件的main字段,将其作为包的接口模块,如果找不到package文件或main的话,会尝试寻找index.js或index.node作为包的接口。
Node.js包管理器
即npm,是node官方提供的包管理工具,用于node包的发布、传播、依赖控制。npm提供了命令行工具,可以方便的下载、安装、升级、删除包,也可以维护包等。获取一个包
命令格式为:npm [install/i] [package_name]
如果你想安装express,可以这样:
$ npm install express//或者$ npm i express
本地模式和全局模式
在使用npm包的时候,用两种模式:本地和全局
全局语法格式:npm [install/i] -g [package_name]
创建全局链接
npm提供了一个npm link命令,他的功能是在本地包和全局包之间创建链接。我们知道使用全局模式安装的包不能直接通过require使用,但是这个命令打破了这个限制。包的发布
运行:npm init
在发布前,你还可以创建一个账号以后好管理你的包,使用npm adduser 根据提示就输入用户名、密码等就可以。完成后,使用npm whoami检测你是否已经获得账号。接下来,在package.json目录下运行nmp publish,就可以发布了,打开浏览器访问:http://search.npmjs.org/就可以看到自己发布的包了。如果你想更新你的包,只需要修改version字段,然后重新使用npm publish 就行了,还可以通过 npm unpublish来取消发布。
调试
单步调试
- 命令行调试
执行:node debug xxxx.js,将启动调试工具。 远程调试
在命令行中执行下面两个语句之一可以打开调试服务器:node --debug[=port] script.jsnode --debug-brk[=port] script.js
- 命令行调试
使用eclipse调试node
略
- Node.js模块、包的学习笔记
- Node.js 模块 包
- Node.js 模块 包
- 【Node.js学习笔记1--模块 npm】
- Node.js学习笔记2【核心模块】
- Node.js学习笔记-----核心模块
- Node.js学习笔记_模块调用
- Node.js学习笔记(2)——新建简单的node.js模块
- 【Node.js学习笔记】1.Linux安装node.js的binaries包
- 了解Node.js的模块、包、包管理器
- Node.js 模块和包
- Node.js模块和包
- node.js模块和包
- Node.js-模块和包
- Node.js模块和包
- node.js模块和包
- Node.js学习--基础知识(4)--模块与包
- Node.js的基本模块学习(三)
- Qt5 emit总结
- android 工具类utils --01
- usb驱动程序初步编写
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
- 深入浅出JMS(一)--JMS基本概念
- Node.js模块、包的学习笔记
- 华师大 OJ 2897
- NLS_LENGTH_SEMANTICS参数对VARCHAR2类型的字段的影响
- DELL XPS15 安装WIN10+ubuntu 14.04双系统 相关问题
- PAT-A 1101. Quick Sort (25)
- linux命令大全(7)--chmod命令详细用法
- tensorflow 入门之MNIST
- 项目架构开发:服务层
- js编码