Node.js 入门教程 (二):模块

由于新工作要做前端,作为前端小白而且能尽快学习,所以选择慕课网的node.js的入门教程。博客只做自己学习的记录。

JavaScript缺少模块管理机制,容易出现变量被覆盖,方法被替代的情况(既被污染)。特别是存在依赖关系时,容易出现错误。采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行。

CommonJs是一套规范,包括了modules,system,encodings,unit test等等来约定JavaScript应该怎么去组织和编写。

首先把执行不同任务的代码块和代码文件看为独立的模块,每一个模块都是一个单独的作用域,但不是孤立的,可能存在依赖关系。每个模块分为三个部分,定义、标识和引用。node.js借鉴了Commonjs的理念,并且基于CommonJS实现了一套模块管理系统。

nodejs里面,每一个js文件可以看成一个独立的模块,里面不需要有命名空间,不需要担心变量污染和方法隔离,而每个模块通过依赖和引入组合起来又组成了更强大的功能包

 

(一)模块分类:

核心模块

文件模块

第三方模块

 

(二)引入模块:

路径引入

名字引入

 

(三)使用模块流程:

创建模块:teacher.js 入口的js文件,并且加入特定功能

导出模块:exports.add=function(){} 把这个功能跟模块名建立关系

加载模块:var teacher=require('./teacher.js') 在其他文件引入并加载模块

使用模块:teacher.add('Scott')

 

(四)代码试验:

目录结构:

school

----student.js

----teacher.js

----class.js

----index.js 入口文件

student.js:

function add(student){
    console.log('Add student:' + student)
}
exports.add = add

代码解析:

exports是一个对象,可以挂载任何合法的JavaScript对象,包括属性,number,date,json,string,array等

 

klass.js:

var student = require('./student')
var teacher = require('./teacher')

teacher.add('Scott')

function add(teacherName, students){
    teacher
    students.forEach(function(item,index){
        student.add(item)
    })
}

exports.add = add

可以直接require模块,不用担心影响全局命名空间,node里面没有全局命名空间这个概念,如果模块没有错误,require就会返回这个模块对象,这个模块对象就是该模块的exports,而且还可以使用局部对象来接收require返回的对象

如果希望模块成为一个特别的对象类型,使用module.exports,如果希望模块成为一个传统的模块实例,使用exports.add(推荐使用)

 

index.js:

var klass = require('./klass')

exports.add = function(klasses){
    klasses.forEach(function(item, index){
        var _klass = item
        var teacherName = item.teacherName
        var students = item.students
        klass.add(teacherName,students)
    })
}var klass = require('./klass')

klass.add('Scott',['Lucy','Ben'])

 

posted @ 2017-12-04 19:05  晓梅子酱  阅读(158)  评论(0编辑  收藏  举报