module、export、require、import的使用

时间: 2018-12-18阅读: 1182标签: 模块

module

每个文件就是一个模块。文件内定义的变量、函数等等都是在自己的作用域内,都是自身所私有的,对其它文件不可见。

每个文件内部都有一个module对象,它包含以下属性:

  • id: 模块的识别符,通常是带有绝对路径的模块文件名
  • filename:模块的文件名,带有绝对路径
  • loaded:返回一个布尔值,表示模块是否已经完成加载
  • parent:返回一个对象,表示调用该模块的模块
  • children:返回一个数组,表示该模块要用到的其他模块
  • exports:表示模块对外输出的值


module.exports

在module中有一个属性exports,即:module.exports。它是该模块对外的输出值,是一个对象。其它模块在加载该模块时,实际上加载到的数据都是由它提供的。

module.exports输出的可以是一个对象,也可以是一个函数。在引用该模块的文件内,如果接受到的是对象,可以直接访问其中的属性,如果接受到的是一个函数,也可以直接执行。


exports

exports是一个特殊的存在,它是对module.exports的指向,可以通过向exports对象中添加变量、方法等,但是不能直接将exports指向一个值,这样会切断exports和module.exports之间的联系。

export和module.exports的使用有一点需要注意,如果导出的是一个函数,只能使用module.exports。


export

export用于规定模块的对外接口,可以输出变量、函数或类。export规定的对外接口必须与模块内部的变量建立一一对应关系。

  • 错误写法
    // 方式一
    export 1; // 报错

    // 方式二
    var a = 1;
    export a; // 报错

    // 方式三
    function fn() {}
    export fn; // 报错
  • 正确写法
    // 方式一
    export var a = 1;

    // 方式二
    var a = 1;
    export {a};

    // 方式三
    var a = 1;
    export {a as a1}; // 对a重命名输出

    // 方式四
    export function fn() {};

    // 方式五
    function fn() {}
    export {fn};


export default

export default和export的区别:

  • 使用export时,输出的内容和接收时用的变量名称必须一致,否则无法加载;使用export default,则为模块指定默认输出,同时,可以为接收到的变量指定其它名称
  • 使用export输出的变量或者函数,在import时,需要使用大括号;使用export default则不用


import

import和export配对使用,用于加载接收export输入的内容


require

require用于加载模块文件,默认加载的文件后缀名为.js

  • 如果加载的文件路径以/开头,则表示加载的是一个绝对路径
  • 如果加载的文件路径以./或../开头,则表示加载的是一个相对当前位置的路径
  • 如果加载的文件路径不以以上内容开头,则加载的是一个核心模块,默认会到node_modules下寻找


小结

module、module.exports、exports采用的是Commonjs模块规范。export和export default采用的是ES6模块规范。

  • module.exports输出的是值的拷贝;export是值的引用
  • module.exports在运行时加载;export是在编译时输出
    // addA.js
    var a = 1;
    function addA() {
        a++;
    }
    module.exports = {
        a: a,
        addA: addA
    };

    // use addA
    var addA = require('./addA.js');
    console.log(addA.a); // 1
    addA.addA();
    console.log(addA.a); // 1

    /************ 改善后 *********************/
    // addA.js
    var a = 1;
    function addA() {
        a++;
    }
    module.exports = {
        get a() {
            return a;
        },
        addA: addA
    };
    // addA.js
    export.a = 1;
    export.addA = function() {
        a++;
    }

    // use addA
    import {a, addA} from './addA';
    console.log(a);// 1
    addA();
    console.log(a);// 2


参考

  • http://es6.ruanyifeng.com/#docs/module
  • http://JavaScript.ruanyifeng.com/nodejs/module.html


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1643

关闭

如何让 node 运行 es6 模块文件,及其原理

最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机制。而现在我们很多项目都是用 es6 的模块化规范来写代码的,包括 node 项目

css模块的解决办法 演进

CSS预处理器最大的好处就是可以支持模块引入,用js的方式来编写CSS,编译之后,终究还是一个文件,因此不可避免的会出现冲突样式;BEM就是为了解决命名冲突以及更好的语义化而生的

Nodejs模块之events

读了 events 模块的文档,研究了几个有意思的问题:事件驱动模型,优雅的错误处理,监听器器队列顺序处理,内存管理与防止泄漏

Node.js使用Kafka-node模块实现生产者与消费者

基于Node.js,采用Kafka-node模块实现生产者与消费者,我正在做一个的项目,我在自己的服务器上有一个Kafka生产者,并使用Kafka-Node作为我的应用程序的消费者。

CSS Module

在软件工程里面模块指的是可组合、分解和更换的单元。下面是一张css树,项目里面总的css文件是由一系列小的单元组成,比如下面的reset.css就是一个单元。模块化的概念不光在css里面

Node.js - 模块系统

模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。Node.js 提供了 exports 和 require 两个对象

http模块和fs模块

response.write()发送一块相应主体,用来给客户端发送相应数据。write可以使用多次,但是最后一定要使用end来结束响应,否则客户端会一直等待。response.end()此方法向服务器发出信号

Node.js中的fs模块的使用

JavaScript 的是没有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系统模块,是 Node 中使用非常重要和高频的模块,是绝对要掌握的一个模块系统。

NodeJS模块os - 与操作系统“打交道”

nodejs 提供了os.platform()和os.type(),可以用来识别操作系统平台。推荐使用: os.platform(),平均负载是指:单位时间内,系统处于可运行状态和不可中断状态的平均进程数。它和 cpu 使用率没有直接关系。

es6中的模块化

在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。先来看个例子,来对一个变量进行模块化

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!