08.node入门之-模块化开发

1.模块的分类

  • 文件模块
    我们自己写的功能模块文件
  • 核心模块
    node平台自带的一套基本的功能模块,也称之为node平台的api
  • 第三方模块
    社区或第三方个人开发好的功能模块,可以直接拿回来用

2.模块化开发的流程

  • 创建模块
    new calc.js
  • 导出成员
    module.exports = {}
  • 载入模板
    var calc = require('./calc.js')
  • 使用模块
    calc.add(1,2)

3.模块内全局环境

  • __dirname
    用于获取当前文件所在目录的完整路径
  • __filename
    用来获取当前文件的完整路径
    以上在REPL环境无效
    module/module.js:
//获取当前脚本所在路径
console.log(__dirname);
//文件路径
console.log(__filename);

test.js:

const module1 = require('./module/module');//会进入到module/module.js执行里面的操作

执行结果:

$ node test
D:\phpStudy\PHPTutorial\WWW\node\module
D:\phpStudy\PHPTutorial\WWW\node\module\module.js

在文件操作中,所有的路径必须是绝对路径(物理路径)
错误示例:

const fs = require('fs');
fs.readFile('../log.txt',(error,content) => {
   if(error) throw error;
    console.log(content);
});

结果:

$ node test
D:\phpStudy\PHPTutorial\WWW\node\module\module.js:8
   if(error) throw error;
             ^

Error: ENOENT: no such file or directory, open 'D:\phpStudy\PHPTutorial\WWW\log.
txt'

正确:

const fs = require('fs');
//fs.readFile(__dirname+'/../log.txt','utf8',(error,content) => {//这种不需要toString()转换了
fs.readFile(__dirname+'/../log.txt',(error,content) => {
   if(error) throw error;
    console.log(content.toString());
});

结果:

$ node test
海王
  • module-模块对象
    node内部提供一个Module构建函数,所有的模块都是Module的实例,属性如下:
    module.id模块的识别符,通常是带有绝对路径的模块文件名。
    module.filename模块定义的文件的绝对路径。
    module.loaded返回一个布尔值,表示是否已经完成加载。
    module.parent返回一个对象,表示该模块用到的其他模块(父级)。
    module.children返回一个数组,表示模块用到的其他模块(子级)。
    test.js:
console.log(module);

打印结果:

$ node test
Module {
  id: '.',
  exports: {},
  parent: null,
  filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\test.js',
  loaded: false,
  children: [],
  paths:
   [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
     'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
     'D:\\phpStudy\\PHPTutorial\\node_modules',
     'D:\\phpStudy\\node_modules',
     'D:\\node_modules' ] }

如果将打印放在module.js中,在test.js引入它
module.js:

console.log(module);

test.js:

require('./module/module');

结果:

$ node test
Module {
  id: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\module.js',
  exports: {},
  parent:
   Module {
     id: '.',
     exports: {},
     parent: null,
     filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\test.js',
     loaded: false,
     children: [ [Circular] ],
     paths:
      [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
        'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
        'D:\\phpStudy\\PHPTutorial\\node_modules',
        'D:\\phpStudy\\node_modules',
        'D:\\node_modules' ] },
  filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\module.js',
  loaded: false,
  children: [],
  paths:
   [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\node_modules',
     'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
     'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
     'D:\\phpStudy\\PHPTutorial\\node_modules',
     'D:\\phpStudy\\node_modules',
     'D:\\node_modules' ] }

可以通过module.parent判断当前这个文件是否被别的文件加载
module.js:

if(module.parent){
    console.log('当前这个文件是被别的文件加载');
}else{
    console.log('入口文件');
}
  • exports
    映射到module.exports的别名,表示模块对外输出的值。

4.模块的定义

  • 一个心的JS文件就是一个模块
  • 一个合格的模块应该是有导出成员的,否则模块就失去了定义的价值。
  • 模块内部是一个独立(封闭)的作用域(模块与模块之间不会冲突)。
  • 模块之间必须通过导出或导入的方式协同;
  • 导出方式:
    exports.name = value
    module.exports = {name : value}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355