美文网首页
4. 核心模块与文件模块

4. 核心模块与文件模块

作者: gem_Y | 来源:发表于2020-06-21 17:26 被阅读0次

    在Node.js中,以模块为单位划分所有功能。每一个模块都是一个Javascript脚本文件。

    4.2 从模块外部访问模块内部的成员

    4.2.1 使用exports 对象

    var myMsg = 'hello'
    var funcname = function() {
      return 'i am funcname1 function'
    }
    exports.msg = myMsg
    exports.funcname = funcname
    
    var foo = require('./chapter-4/foo')
    console.log(foo.msg)
    console.log(foo.funcname())
    

    4.2.2 将模块定义为类

    也可以在模块文件内将 exports对象书写为 “module.exports” ,\color{red}{但需要将模块定义为一个类时,只能使用 module.exports}

    var _name;
    var name = '初始值'
    // 模块对象的构造函数
    var foo = function(name) {
      _name = name
    }
    // 获取私有变量_name的变量值
    foo.prototype.GetName = function() {
      return _name
    }
    // 设置私有变量_name的值
    foo.prototype.SetName = function(val) {
      _name = val
    }
    foo.prototype.name = name
    
    module.exports = foo
    
    var foo = require('./chapter-4/foo-class.js')
    var myFoo = new foo("Tom") // 新建模块对象
    console.log(myFoo.GetName())
    myFoo.SetName('Gemma')
    console.log(myFoo.GetName())
    
    // 获取模块对象内的name公有变量值
    console.log(myFoo.name)
    

    4.2.3 为模块类定义类变量和类函数

    // ...续上面
    foo.staticName = '' // 定义类变量
    // 定义类函数
    foo.staticFunction = function() {
      console.log(foo.staticName)
    }
    
    module.exports = foo
    
    // 类变量
    foo.staticName = '静态变量'
    foo.staticFunction()
    

    4.3 组织与管理模块

    4.3.1 从node_modules目录中加载模块

    /home/ry/project/app.js

    require('bar.js')
    

    加载的路径依次为

    1. /home/ry/projects/node_modules/bar.js
    2. /home/ry/node_modules/bar.js
    3. /home/node_modules/bar.js
    4. /node_modules/bar.js

    4.3.2 使用目录来管理模块

    1)就是平常见到的在目录下建 index.js 文件,require('bar') 就会默认加载bar目录下面的
    index.js

    1. 在应用程序根目录下的node_modules 子目录的 bar目录下创建一个package.json文件
    "name": "foo",
    "main": "./lib/bar.js"
    
    require('bar')
    

    4.4 模块对象的属性

    • module.id 当前模块的ID。默认情况下,主模块的ID 属性值为“.”,其他模块的ID属性值为该模块文件的绝对路径。在模块文件中可以修改当前模块的ID属性值
    console.log(module.id)
    module.id="foo"
    console.log(module.id)
    
    • module.filename 当前模块文件的文件名


      image.png
    • module.loaded 模块是否加载完毕
    • module.parent 当前模块的父模块对象,即调用当前模块的模块对象
    • module.children 属性为一个数组,为当前模块中已加载的所有模块对象

    4.5 Node.js中的包

    在Node.js中,一个包事实上是一个目录,通常包含如下内容:
    1) package.json 其中包含了用于对包进行描述的JSON格式的文件。

    1. 在bin子目录中存放二进制文件
      3)在lib子目录中存放Javascript文件
      4)在doc子目录存放对包或包的使用方法进行说明的文档文件
      5)在test子目录中存放一些对包进行单元测试用的文件

    package.json 通常包含的字段

    1)name

    1. preferglobal 是否支持全局安装
      3)bugs bug的提交地址
      4)keywords 关键字数组,通常用于搜索

    相关文章

      网友评论

          本文标题:4. 核心模块与文件模块

          本文链接:https://www.haomeiwen.com/subject/kwyaxktx.html