zoukankan      html  css  js  c++  java
  • node.js

      1 模块(module)和包(package)是Node.js最重要的支柱,它通过require函数调用其他的模块,他的模块式基于文件的,机制简单。
      2 module是Node.js程序的基本组成部分,file和module一一对应。
      3 create module and get module:
      4 one file is a module ,Node.js  给我们提供了exports 和 require 这两个对象,
      5 exports是模块的公开的接口,require是用于从外部获取一个模块的接口。
      6 
      7 for example:
      8 /*
      9 *author:e路相扶
     10 *filename module.js
     11 */
     12 var name;
     13 exports.setName=function(thyName){
     14     name=thyName;
     15 }
     16 exports.sayHello=function(){
     17     console.log('Hello '+name);//连接符和js
     18 }
     19 /*
     20 *author:e路相扶
     21 *filename getmodule.js
     22 */
     23 var myModule=require('./module');
     24 myModule.setName('e路相扶');
     25 myModule.sayHello();
     26 
     27 like module.js,exports object take setName ,sayHello as module's access interface.
     28 getmodule.js use require object load module,and then direct access exports object .
     29 
     30 
     31 /*
     32 *author:e路相扶
     33 *filename loadmodule.js
     34 */
     35 var hello1=require('./module');
     36 hello1.setName('e路相扶');
     37 
     38 var hello2=require('./module');
     39 hello2.setName('e路相扶2');
     40 
     41 hello1.sayHello();//e路相扶2
     42 hello2.sayHello();//e路相扶2
     43 
     44 
     45 require 不会重复加载模块。hello1,hello2指向的是同一个实例,因此hello1被hello2覆盖
     46 
     47 /*
     48 *author:e路相扶
     49 *filename hello.js
     50 */
     51 function Hello(){
     52     var name;
     53     this.setName=function(thyName){
     54         name=thyName;
     55     }
     56     this.setHello=function(){
     57         console.log('Hello '+name);
     58     }
     59 }
     60 module.exports=Hello;
     61 /*
     62 *author:e路相扶
     63 *filename gethello.js
     64 */
     65 var hello=new Hello();
     66 hello.setName('e路相扶');
     67 hell0.sayHello();
     68 
     69 这两个模块的唯一变化就是使用了module.exports=Hello代替了exports.Hello=Hello,在外部
     70 引用该模块的时候,其接口对象就是输出Hello对象的本身,而不是原先的exports。
     71 
     72 exports 本身仅仅是一个普通的空对象{},本质是通过它为模块闭包内部建立一个有限的访问接口。
     73 
     74 warning:
     75     不可以通过对expotrs直接赋值代替对module.exports赋值。
     76     exports实际上只是和module.exports指向同一个对象的变量。
     77     他本身会在模块执行结束后释放,但是module不会,因此只能通过制定的module.exports来改变反问接口。
     78 
     79 
     80 create package:
     81     node.js package 将某个独立的功能封装起来,用于发布,更新,依赖管理和版本控制。
     82     node.js的包是一个目录,包含一个Json格式的包说明文件,package.json 
     83 特征:
     84     package.json 必须在包的顶层目录下
     85     二进制文件在bin目录下
     86     javascript代码在lib目录下
     87     文档应该在doc目录下
     88     单元测试在test目录下
     89 
     90 作为文件夹的模块:
     91 
     92 /*
     93 *author:e路相扶
     94 *folder Name somepackage
     95 *filename ./index.js
     96 */
     97 exports.hello=function(){
     98     console.log('Hello.');
     99 }
    100 
    101 /*
    102 *author:e路相扶
    103 *filename getPackage.js
    104 */
    105 var somePackage=require('./somepackage');
    106 somePackage.hello();//Hello.
    107 
    108 /*
    109 *author:e路相扶
    110 *folder Name somepackage
    111 *filename ./package.json
    112 */
    113 {
    114     "main":"./lib/interface.js"//将index.js 重命名interface.js,放在lib下,依旧可以使用
    115 }
    116 
    117 
    118 Node.js在调用某个包的时候,会先检查package.json的main字段,将其作为接口模块,
    119 假如package.json或者main字段不存在,会尝试寻找index.js或者index.node为接口。
    120 
    121 package.json是CommonJs规定用来描述包的文件,应包含一下字段:
    122     name:package name ,唯一,由小写英文字母,数字和下划线组成,不能包含空格
    123     description:包的简要说明
    124     version:符合语义化版本识别规范的版本字符串
    125     keywords:关键字组,通常用于搜索
    126     maintainers:维护者数组,每个元素包含name,【email|web】
    127     bugs:提交bug的地址,可以是网址或者是电子邮件的地址
    128     licenses:许可证数组,每个元素包含type(许可证名称)和url(连接到许可证的文本地址)
    129     repositories:仓库托管地址数组,每个元素包含type(仓库类型git),url(仓库地址),[path]
    130     dependencies:包的依赖,一个关联数组由包名称和版本号组成。
    131 
    132 for example:
    133 {
    134   "author": "e路相扶 <zhangjun516@126.com> (http://www.wownepiece.com)",
    135   "name": "hello",
    136   "description": "A example for write a module",
    137   "version": "0.0.1",
    138   "repository": {
    139     "url": ""
    140   },
    141   "main": "hello.js",
    142   "engines": {
    143     "node": "*"
    144   },
    145   "dependencies": {},
    146   "devDependencies": {}
    147 }
    148 
    149 npm是Node.js官方提供的包管理工具,
    150 
    151 nmp安装有两种模式:本地模式和全局模式
    152 nmp [install/i] [package_name] //默认安装到当前目录的node_modules子目录下 本地模式
    153 nmp [install/i] -g [package_name]  //全局模式
    154 
    155 require 加载模块时,会尝试搜寻node_modules子目录,因此nmp本地模式安装包可以直接被引用。
  • 相关阅读:
    PageControl1
    IE6 发送奇数个汉字出现的BUG机器解决之道
    十 C# Socket协议的形象描述
    深入浅出URL编码
    认识session
    Servlet过滤器介绍之原理分析
    web开发标准
    JS 截取字符串及字符与数字转换
    Servet和JSP学习总结(转载)
    端口、系统服务、系统进程概念
  • 原文地址:https://www.cnblogs.com/zhangjun516/p/3171216.html
Copyright © 2011-2022 走看看