JS模块如何暴露与导入

当项目功能越来越多,代码量便也会越来越多,后期的维护难度会增大,此时在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 更好哦

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容