美文网首页
JS模块如何暴露与导入

JS模块如何暴露与导入

作者: 感觉不错哦 | 来源:发表于2018-10-31 17:09 被阅读395次

    当项目功能越来越多,代码量便也会越来越多,后期的维护难度会增大,此时在JS方面就会考虑使用模块化规范去管理维护。

    稍微介绍一下常用的模块暴露方法

    随着ES6的普及以及babel的广泛应用,越来越多的喜欢使用ES6模块导入,在ES6之前,也有遵循COMMON.JS 使用require进行模块导入

    我们通常使用的暴露有三种方式:exports module.exports export default export
    经常使用的引入方式有两种:import from 和 require

    有时候记太多概念并没什么效果 用就完事了

    我们只需记住
    export  ||  export default => import
    
    ES6通过export 以及export default 暴露模块 通过import 导入
     exports || module.exports =>require
    
    遵循COMMON.JS的规范 进行模块化开发

    ES6模块导入

    导出: export,export default
    可以导出变量,函数,对象,文件,模块

    在测试的时候最好是在有babel的环境下,不然有可能报错,建议在vue-cli中的APP.VUE中测试

    首先先新建一个js文件

        function add() {
            console.log("hello");
        }
        var a=9
        var obj={
        a:3,
        b:4,
        c:5
        }
        export {add,a,obj}
    

    也有这种写法

    export  var a = 9
    export function fn(){}
    

    错误写法

    // 报错 
    export 1; 
    // 报错  
     var m = 1; 
     export m; 
    

    模块导入 import * from ' '

    <script>
    import {add,a,obj} from './es6.js'  =>export 暴露 导出一定要加大括号 按需导入 需要什么导什么
    export default {
      name: 'App',
      created(){
        add()    =>导入之后可直接使用  
        console.log(a)
        console.log(obj,obj.a)
      }
    }
    </script>
    

    也可以将所有内容导入对象中,通过对象来调用

        var a={
                fn:function(){
                    console.log(9)
                },
                a:9,
                obj:{                    
                    a:1,
                    b:2,
                    c:3
                }
            }
            export {a}    
    

    还是使用{}improt 导入

    <script>
    import {a} from './es6.js'
    export default {
      name: 'App',
      created(){
         a.fn()
      }
    }
    </script>
    

    export default

    var   a={
                fn:function(){
                    console.log(9)
                },
    
                a:9,
                obj:{
                    
                    a:1,
                    b:2,
                    c:3
                }
            }
    
    export default a     =>注意 这里使用了export default  a并没有加{}
    

    导入default

    <script>
    import a from './es6.js'  =>其余不变  取消括号
    export default {
      name: 'App',
      created(){
         a.fn()
      }
    
    }
    </script>
    

    区别:export default 只能存在一个 导入不需要加{ }
    export可以存在多个 导入一定要加{ }

    var a=1;
    var b=2;
    var c=3
    
    export default a
    export {b,c}  
    

    两者同时存在的引入方法还是那样 default 不加{ } export 加{ }

    import  a ,{b,c} from './es6.js'
    export default {
      name: 'App',
      created(){
         console.log(a,b,c)
      }
    
    }
    </script>
    

    as关键字 这种用法比较少 了解一下

    var a=1;
    var b=2;
    var c=3
    
    export {a,b,c}
    

    在导入的时候 将数据存储到新的对象名中使用

    <script>
    import * as obj from './es6.js'  =>注意此处没有{}  在全部数据都导入obj的时候 也就是使用通配符(*)的时候
    export default {
      name: 'App',
      created(){
         console.log(obj.a)   =>相当于把所有的数据存到了obj中
      }
    
    }
    </script>
    

    引入局部的时候

    <script>
    import {a as obj}  from './es6.js'
    export default {
      name: 'App',
      created(){
         console.log(obj)  =>注意此时 使用obj调用  用a 反而报错
      }
    
    }
    </script>
    

    在暴露的时候同样可以使用as

    var a=1;
    var b=2;
    var c=3
    
    export {a as default} =>很容易看懂 就是将a变成了默认暴露
    

    既然变成了默认就可以随意引入了

    <script>
    import  aaaaa from './es6.js'  =>一旦是默认暴露就可以自由命名
    export default {
      name: 'App',
      created(){
         console.log(aaaaa)
      }
    
    }
    </script>
    

    全部暴露

    var a=1;
    var b=2;
    var c=3
    
    export {a as default,b,c}
    

    引入又变成跟以前一样了 其实个人感觉没什么用 了解一下

    <script>
    import  aaaaa,{b,c} from './es6.js'
    export default {
      name: 'App',
      created(){
         console.log(aaaaa,b,c)
      }
    
    }
    </script>
    

    require 导入

    require 导入是比较霸道的,直接require(‘path’)
    一点不跟你含糊 全部导入 类似import * as from ‘ ’

    exports --- moudel.exports

    moudel.exports的简单用法 在新建js中

    var a={
        name:'node',
        length:4
    }
    
    module.exports=a      根据export的例子很容易就能看懂了
    

    使用require 引入

        <template>
          <div id="app">
            {{value}}     
          </div>
        </template>
    
    <script>
    var a=require('./exports.js')     
    var that=this;   
    export default {
      name: 'App',
      data(){
          return{
            value:a.name
          }
      }
    
    }
    </script>
    

    刚才例子比较好理解,来一套多个数据的

    function fn1(){
        return '666'
    }
    function fn2(){
        return '888'
    }
    c=9
    module.exports={
        fn1:fn1,     =>前面的fn1 类似于 export中的 as 别名  引入 通过fn1 调用 fn1 方法  哎呀是不是很拗口
        fn2,          =>键值相同可以简写的 相信小伙伴都知道
        c:c
    }
    

    导入的方式依旧粗暴

        <template>
          <div id="app">
    
            {{value}}
            <hr>
            {{value1}}
            <hr>
            {{value2}}
          
          </div>
        </template>
    
    <script>
    var a=require('./exports.js') 
    var that=this;   
    export default {
      name: 'App',
      data(){
          return{
            value:a.c,
            value1:a.fn1(),
            value2:a.fn2()
          }
      }
    
    }
    </script>
    

    exports用法

    function fn1(){
        return '666'
    }
    function fn2(){
        return '888'
    }
    c=9
    
    exports.fn1=fn1
    exports.fn2=fn2
     /*{     这种写法虽然不报错 但是是无效滴
      exports = {
       fn1,
       fn2
      };  
     }*/
    

    导入方法还是不变 暴力导入

        <template>
          <div id="app">
            <hr>
            {{value1}}
            <hr>
            {{value2}}
          
          </div>
        </template>
    
    <script>
    var a=require('./exports.js') 
    var that=this;   
    export default {
      name: 'App',
      data(){
          return{
            value1:a.fn1(),
            value2:a.fn2()
          }
      }
    
    }
    </script>
    

    exports module.exports小结

    其实exports只是辅助器,到最后还是会转换成module.exports
    真正暴露的是module.exports 所以还是直接使用module.exports 更好哦

    相关文章

      网友评论

          本文标题:JS模块如何暴露与导入

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