• 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本地模式安装包可以直接被引用。
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/zhangjun516/p/3171216.html
Copyright © 2020-2023  润新知