Node模块化

Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。Node是对ES标准一个实现,也是一个JS引擎。与传统服务器不同是Node的服务器是单线程的。

一、Node模块化

Node基于CommonJS规范实现模块化,解决了ECMAScript标准的没有模块系统、标准库较少、没有标准接口、缺乏管理系统等缺陷。

Node模块定义分为:

  •   模块的定义
  •   模块的引用
  •   模块的标识

下面通过一个简单示例来理解Node模块化,Module3中引用Module1和Module2

项目路径:

 module1

/*
    模块化
        - 在Node中,一个js文件就是一个模块
        - 在Node中,每一个js文件中的js代码都是独立运行在一个函数中
            而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问

    我们可以通过 exports 来向外部暴露变量和方法
    只需要将需要暴露给外部的变量或方法设置为exports的属性即可
 */


exports.x="我是module1.js中的x"
exports.fn=function () {
    console.log("module1.function")
}

module2

module.exports.add=function (x,y) {
    return x+y
}


module.exports.minus=function (x,y) {
    return x-y
}

module3

/*
    在node中,通过require()函数来引入外部的模块
        require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块
        这里路径,如果使用相对路径,必须以.或..开头

    使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块

    我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块
    - 模块分成两大类
        核心模块
            - 由node引擎提供的模块
            - 核心模块的标识就是,模块的名字
        文件模块
            - 由用户自己创建的模块
            - 文件模块的标识就是文件的路径(绝对路径,相对路径)
                相对路径使用.或..开头
 */

var module1 = require("./module1.js");
var module2 = require("./module2.js");

console.log(module1.x);
console.log(module2.add(1,2));

实际上每一个js文件中的js代码都是独立运行在一个函数中,都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参。在上述module2代码中加入 console.log(arguments.callee + ""),打印出该函数

function (exports, require, module, __filename, __dirname) { module.exports.add=function (x,y) {
    return x+y
}


module.exports.minus=function (x,y) {
    return x-y
}

console.log(arguments.callee + "")
}

其中

exports - 该对象用来将变量或函数暴露到外部

require - 函数,用来引入外部的模块

module
- module代表的是当前模块本身
- exports就是module的属性
- 既可以使用 exports 导出,也可以使用module.exports导出

__filename - 当前模块的完整路径

__dirname - 当前模块所在文件夹的完整路径

 

注意事项:

exports 和 module.exports
- 通过exports只能使用.的方式来向外暴露内部变量
exports.xxx = xxx

- 而module.exports既可以通过.的形式,也可以直接赋值
module.exports.xxx = xxxx
module.exports = {}

posted @ 2019-11-06 16:51  小亮的BLOG  阅读(189)  评论(0编辑  收藏  举报