require与 import

作者: 天涯笑笑生 | 来源:发表于2018-07-26 14:16 被阅读0次

    一、exports...require...

    • CommonJS 模块
    • 由Nodejs 提供,每个文件都被视作独立的模块
    • 模块被 Node.js 包装在一个函数中,因此模块内的本地变量是私有的
    • module.exports属性可以被赋予一个新的值(例如函数或对象)
    • 想要获得调用 require() 时加载的确切的文件名,使用 require.resolve() 函数
    • exports 输出的是值的缓存,不存在动态更新
      util.js file
    const value = 'util'
    
    exports.fun1 = (v) => 'fun1-'+'v:'+v+'-value:'+value
    exports.fun2 = (v) => 'fun2-'+'v:'+v+'-value:'+value
    

    people.js file

    // 赋值给 `exports` 不会修改模块,必须使用 `module.exports`
    
    module.exports = class People {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
    
        toString() {
            return 'name:'+this.name+' age:'+this.age;
        }
    }
    

    Test5.js file

    //nodejs require 测试
    
    const util = require('./util');
    const People = require('./people');
    
    console.log(util.fun1('parameter'))
    console.log(util.fun1('parameter'))
    
    const people = new People('Jony', 28);
    
    console.log(people.toString());
    
    require 测试结果

    二、export...import...

    • ES6 模块
    //按需导入
    import {
        Switch,
        HashRouter as Router,
        Route
    } from 'react-router-dom';
    
    • 如上例,称为“编译时加载”或者静态加载,效率要比 CommonJS 模块高
    • export对外提供接口,阮一峰举例
    // 报错
    export 1;
    
    // 报错
    var m = 1;
    export m;
    
    // 写法一
    export var m = 1;
    
    // 写法二
    var m = 1;
    export {m};
    
    // 写法三
    var n = 1;
    export {n as m};
    
    // 报错
    function f() {}
    export f;
    
    // 正确
    export function f() {};
    
    // 正确
    function f() {}
    export {f};
    
    
    • export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。
    export var foo = 'bar';
    setTimeout(() => foo = 'baz', 500);
    
    //上面代码输出变量foo,值为bar,500 毫秒之后变成baz
    
    • export default 为模块指定默认输出,import 后面可以指定任意名字

    相关文章

      网友评论

        本文标题:require与 import

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