• node.js第二天之模块


    一、模块的定义

      1、在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分。

      2、狭义的说,每一个JavaScript文件都是一个模块;而多个JavaScript文件之间可以相互require,他们共同实现了一个功能,他们整体对外,又称为一个广义上的模块。

      3、Node.js中,一个JavaScript文件中定义的变量、函数,都只在这个文件内部有效。当需要从此JS文件外部引用这些变量、函数时,必须使用exports对象进行暴露。使用者要   用require()命令引用这个JS文件。

    二、js文件和js文件之间有两种合作的模式:

      首先看一下文件的结构

    1、

     某一个js文件中,提供了函数,供别人使用。 只需要暴露函数就行了; exports.msg=msg;

    test/foo.js

    var bar = require("./bar.js");
    var msg = "你好";
    var info = "呵呵";
    
    function showInfo(){
        console.log(info);
    }
    
    exports.msg = msg;
    exports.info = info;
    exports.showInfo = showInfo;

    msg这个变量,是一个js文件内部才有作用域的变量。

    如果别人想用这个变量,那么就要用exports进行暴露

    04.js

    var foo = require("./test/foo.js");
    
    console.log(foo.msg);
    console.log(foo.info);
    foo.showInfo();

    使用者用foo来接收exports对象,也就是说,这里的foo变量,就是文件中的exports变量。

    2、某一个js文件,描述了一个类。   module.exports = People;

    People.js

    function People(name,sex,age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    
    People.prototype = {
        sayHello : function(){
            console.log(this.name + this.sex + this.age);
        }
    }
    
    //此时,People就被视为构造函数,可以用new来实例化了。
    module.exports = People;

    05.js

    var People = require("./test/People.js");
    var xiaoming = new People("小明","","12");
    xiaoming.sayHello();

     三、node_modules目录

    1、如果在require命令中,这么写:

    1           var foo = require("foo.js");   //没有写./, 所以不是一个相对路径。是一个特殊的路径

    那么Node.js将该文件视为node_modules目录下的一个文件

    2、 node_modules文件夹并不一定在同级目录里面,在任何直接祖先级目录中,都可以。甚至可以放到NODE_PATH环境变量的文件夹中。这样做的好处稍后你将知道:分享项目的时候,不需要带着modules一起给别人。
     

    3、 我们可以使用文件夹来管理模块,比如

    那么Node.js将会去寻找node_modules目录下的bar文件夹中的index.js去执行。

    1    var bar = require("bar"); 

    每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:

       {
    
    2             "name": "kaoladebar",
    
    3             "version": "1.0.1",
    
    4             "main" : "app.js"
    
    5           }
    
    6            

    package.json文件,要放到模块文件夹的根目录去。

  • 相关阅读:
    Jetson AGX Xavier配置使用OpenCV(报错:No package 'opencv' found)
    centos7 lnmp
    php用户签到,领取红包
    php红包功能
    Mysql 主从复制
    mysql 小技巧
    区块链学习笔记一
    PHP 常用自定义函数
    centos7.4 搭建lnmp
    什么是跨域?怎么解决跨域问题?
  • 原文地址:https://www.cnblogs.com/15fj/p/7845369.html
Copyright © 2020-2023  润新知