node 模块引入与其他语言思路相通的一些分析

1、模块

新建模块:
module.js

var name;
exports.setName=function(thyName){
    name=thyName;
}
exports.sayHello=function(){
    console.log('hello  '+name);
}

解析:导出俩个方法

exports.setName=...
exports.sayHello=...

调用模块:
新建文件,getModule.js

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

解析:

引入模块
var myModule = require('./module');

调用模块里面的方法
myModule.setName('can');
...

效果:

Paste_Image.png

改造:
在调用模块中怎加代码:

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


var myModule2 = require('./module');
myModule2.setName('lky');
myModule.sayHello();//注意这里是调用上面一个对象

调用结果:

Paste_Image.png

问题:原来的myModule被后来的变量设置方法覆盖掉了。

也就是说,不论引入多少次,module 的模型调用的始终是同一个对象。

2、解决调用同一对象问题:

问题所在
先从代码分析:

var name;  //这个包里面只存在一个变量  name,所以引入的包也只存在一个n变量 name
exports.setName=function(thyName){
    name=thyName;
}
exports.sayHello=function(){
    console.log('hello  '+name);
}

包引入 require 默认只会引入一次,也就是说,无论 调用多少次,如果是一个包,都会是只引入一次,这也是当初设计者的初衷(避免包的重复引入)。
所以解决方案有以下:
#######1、改造包里面的代码
#######2、改变调用包的代码
#######3、改变引入包的方式(require){不可取,违反设计初衷}
现在来改造包里面的代码
新建objModule.js

function student(){
    var name;
    this.setName =function(thyName){
        name = thyName;
    }
    this.sayHello=function(){
        console.log('hello '+ name);
    }

}
module.exports=student;//暴露接口

如果有其他语言基础的同学,可以将 student理解为一个对象。详情请看js的高级视频。通过 function student() 定义一个对象。
调用包的代码:
getObjModule.js

var student = require('./objModule');
var stu1=new student();//实例化对象
stu1.setName('can');
stu1.sayHello();


var stu2=new student();//实例化对象
stu2.setName('lky');
stu1.sayHello();
stu2.sayHello();

这样问题就解决了。

Paste_Image.png

重新再看一边,有木有很熟悉的赶脚,思路是否似曾相识。都是通过或以下步骤:

*1、新建对象类(js方式:function student(){})
*2、实例化对象类 (new student();)
*3、调用实例对象的方法 (stu1.sayHello();)

3、打造一个一个自己的包

新建package文件夹,文本架构如下

bin
doc
lib
test
package.json

package.json文件如下

{
  "main":"./lib/package.js"
  //主要        引入文件
}

lib文件夹的package.js

exports.say=function(){
console.log(" test package!");
}

//定义一个简单的接口

调用代码:

//直接引入包文件名,会默认去找index.js 或找package.json  main所指向的路径。
var pack=require("./package");
pack.say();
Paste_Image.png
3.1、package.json的规范简单描述
  "name" : "xxx",//包的名字
  "version" : "0.0.0",//包的版本号
"description": "第一个node.js程序",//简要说明,这个是用来干嘛的
"keywords":["can","node.js","javascript"],
//关键词,用于包搜索,例如搜索can的话会搜索到该包,当然前提是你要发布出去
......

请参考完整的package.json

{
    "name": "Hello World",
    "version": "0.0.1",
    "author": "张三",
    "description": "第一个node.js程序",
    "keywords":["node.js","javascript"],
    "repository": {
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT",
    "engines": {"node": "0.10.x"},
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
    "contributors":[{"name":"李四","email":"lisi@example.com"}],
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
    "devDependencies": {
        "bower": "~1.2.8",
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0",
        "grunt-contrib-jshint": "~0.7.2",
        "grunt-contrib-uglify": "~0.2.7",
        "grunt-contrib-clean": "~0.5.0",
        "browserify": "2.36.1",
        "grunt-browserify": "~1.3.0",
    }
}

具体package.json详细内容
愿看到这里的同学都涣然大悟,技术路上与你同行!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 1 Node.js模块的实现# 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都...
    七寸知架构阅读 2,047评论 1 50
  • 1 Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都着...
    zlx_2017阅读 1,203评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 其实我也还看过一句话:把你的心揣好吧,别让人一戳,它就动了。
    俩八阅读 87评论 0 0