美文网首页
module.exports 和exports、export和e

module.exports 和exports、export和e

作者: 无疆wj | 来源:发表于2019-09-27 17:33 被阅读0次

    CommonJS规范module.exports 和exports、require
    es6入门export和export default、import

    1、module.exports 和exports、require

    exports和module.expoers 输出

    exportsmodule.expoers的引用,都是对外输出本模块的内容
    同一模块下 exports.amodule.expoers.a输出的内容是一样的
    CommonJS模块的加载机制是,输入的是被输出的值的拷贝。也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。

    require 引入

    Node使用CommonJS模块规范,内置的require命令用于加载模块文件。
    require加载文件的后缀名默认为.js
    第一次加载某个模块时,Node会缓存该模块。以后再加载该模块,就直接从缓存取出该模块的module.exports属性。
    所有缓存的模块保存在require.cache之中

    require(): 加载外部模块
    require.resolve():将模块名解析到一个绝对路径
    require.main:指向主模块
    require.cache:指向所有缓存的模块
    require.extensions:根据文件的后缀名,调用不同的执行函数
    

    exports和require

    require命令的基本功能是: 读入并执行一个JavaScript文件,然后返回该模块的exports对象。

    如果模块输出的是一个函数,那就不能定义在exports对象上面,而要定义在module.exports变量上面。

    2、export和export default、import

    模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能

    export

    一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量

    // profile.js
    export var firstName = 'Michael';
    export var lastName = 'Jackson';
    export var year = 1958;
    

    等同于

    // profile.js
    var firstName = 'Michael';
    var lastName = 'Jackson';
    var year = 1958;
    
    export { firstName, lastName, year };
    

    上面代码在export命令后面,使用大括号指定所要输出的一组变量。它与前一种写法(直接放置在var语句前)是等价的,但是应该优先考虑使用这种写法。因为这样就可以在脚本尾部,一眼看清楚输出了哪些变量。
    export命令除了输出变量,还可以输出函数或类(class)。
    需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

    import

    es6之import

    使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。
    如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。
    注意,import命令具有提升效果,会提升到整个模块的头部,首先执行。
    import语句会执行所加载的模块,因此可以有下面的写法。

    import 'lodash';
    

    上面代码仅仅执行lodash模块,但是不输入任何值。
    `
    除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

    import * as circle from './circle';
    

    export default 命令

    export default命令,为模块指定默认输出。

    // export-default.js
    export default function () {
      console.log('foo');
    }
    

    上面代码是一个模块文件export-default.js,它的默认输出是一个函数。
    其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

    // import-default.js
    import customName from './export-default';
    customName(); // 'foo'
    

    上面代码的import命令,可以用任意名称指向export-default.js输出的方法,这时就不需要知道原模块输出的函数名。需要注意的是,这时import命令后面,不使用大括号。

    相关文章

      网友评论

          本文标题:module.exports 和exports、export和e

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