美文网首页
JS中 export,export default,import

JS中 export,export default,import

作者: 付小影子 | 来源:发表于2020-11-17 16:31 被阅读0次

    阮一峰 ECMAScript 6
    module.exports 和 exports是属于CommonJS模块规范,对应---> require属于CommonJS模块规范
    export 和 export default是属于ES6语法,对应---> import属于ES6语法

    module.exports和exports

    导出:module.exports 或 exports
    导入:require
    通常exports方式使用方法是:
    exports.[function name] = [function name]
    moudle.exports方式使用方法是:
    moudle.exports= [function name]
    **exports **返回的是模块函数
    **module.exports **返回的是模块对象本身,返回的是一个类
    CommonJS 模块就是对象,输入时必须查找对象属性。

    let { stat, exists, readfile } = require('fs');
    
    // 等同于
    let _fs = require('fs');
    let stat = _fs.stat;
    let exists = _fs.exists;
    let readfile = _fs.readfile;
    

    module.exports 可以返回全局共享的变量或者方法。

    //导出app.js
    var app = {
        name: 'app',
        version: '1.0.0',
        sayName: function(name){
            console.log(this.name);
        }
    }
    module.exports = app;
    //引用
    var app = require('app.js对应的路径');
    app.sayName('hello');//hello
    

    export和export default

    导出:export 或 export default
    导入:import
    export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能
    一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量
    1.export与export default均可用于导出常量、函数、文件、模块等
    2.在一个文件或模块中,export、import可以有多个,export default仅有一个

    1. 通过export方式导出,在导入时要加{ },export default则不需要
    2. export能直接导出变量表达式,export default不行。
    导出变量
    // 写法一
    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};
    

    import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。
    如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名

    import { firstName, lastName, year } from './profile.js';
    import { lastName as surname } from './profile.js';
    function setName(element) {
      element.textContent = firstName + ' ' + lastName;
    }
    
    例纸
    export const a = '100';  
    export const h1= function(){ 
        console.log('hello shadow');
    }
    function h2(){
       console.log('hello h2'); 
    }
    export { h2};
    
    //export default导出
    const m = 200;
    export default m; 
    //引用
    import { h1, h2,a} from '.js路径地址'; //导出了 export 方法 
    import m from './testEs6Export';  //导出了 export default 
    h1() //hello shadow
    h2() //hello h2
    console.log(a) //100
    consolo.log(m) //200
    

    export default和require混合使用

    1.import 这种加载称为“编译时加载”或者静态加载
    2.require 这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,或者动态加载

    所以不能按需加载对应的js使用import,必须提前引入,如果在判断条件中使用import,就会报出如下问题:
    'import' and 'export' may only appear at the top level (372:2)
    但是import和exports不能同时使用,混用import和module.exports会报出如下问题:
    Uncaught TypeError: Cannot assign to read only property 'exports' of object

    需要用import又需要用require,就需要 require(xx.js).default

    //导出会员升级插件
    import smtmallcomponents  from  "./smtmallcomponents.umd.js"
    console.log("smtmallComponents",smtmallcomponents)
    var routes = {
            path: '/vipUpdate',
            name: "VipUpdate",
            meta: { title: '会员升级' },
            component: smtmallcomponents[0]
          }
    export default{routes}
    //按需引入
    if(window.location.host.indexOf("小星星") >= 0){
     let smtmallcomponentRoutes = require( '../../static/js/xqyg/index')
     targetRouter.push(smtmallcomponentRoutes.default.routes);
    }
    

    相关文章

      网友评论

          本文标题:JS中 export,export default,import

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