• 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 = {}

  • 相关阅读:
    嵌入式框架Zorb Framework搭建五:事件的实现
    C#网络编程系列文章(五)之Socket实现异步UDP服务器
    C#SocketAsyncEventArgs实现高效能多并发TCPSocket通信 (服务器实现)
    C#中的ManagementClass类
    Etcd v3备份与恢复
    kubernetes调度重平衡工具 Descheduler
    K8S – 优化dns解析时间
    kubernetes备份和恢复
    Coredns部署更新
    认识Kubernetes Descheduler
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/11806348.html
Copyright © 2020-2023  润新知