es6中的模块导入方法与node中的区别
node中的导入导出方式是:
导入:require
require('./xxx')
var add = require('./main')
console.log(add.add(1,2));
console.log(add.obj.a);
导出:exports module.exports
-
export.a=1
-
module.exports.a=1
function add(x,y){ return x+y } let obj = { a:1, b:2 } /*方式一*/ exports.add = add//将add函数赋值给exports.add exports.obj = obj /*方式二*/ module.exports = {add,obj}
es6中的导入导出方式是
导入:
-
通用导入方式
import * as xx(修改引用名) from ‘xxx’(要引入的模块的地址)
import * as m1 from './js/m1.js' console.log(m1.a) m1.fun() import * as m3 from './js/m3.js' console.log(m3); console.log(m3.default.school);
-
解构赋值导入方式
import {a,b}(es6中解构赋值的形式获取模块暴露的变量) from ’xxx‘(要引入的模块的地址)
import {a,fun} from './js/m1.js' console.log(a); import {school,getSchool} from './js/m2.js' console.log(school); import {default as m3} from './js/m3.js'//将默认暴露的default对象用变量m3来接收 m3.change()
-
针对默认暴露的导入方式
针对默认暴露 不需要像通用导入和解构赋值一样使用default.属性来调用
import m3 from './js/m3.js' console.log(m3); console.log(m3.school) m3.change()
导出:
-
分别暴露
export const a = 1 export function fun(){ console.log("我是分别暴露的函数"); }
-
统一暴露
let school = '朝阳小学' function getSchool(){ console.log(school); } export {school,getSchool}
-
默认暴露
export default { school:'大哥大', change:function(){ console.log("我们可以改变世界!"); } }
区别:
对于node中的模块系统,在模块导入导出的过程中,node底层为每个js文件都创建了一个名为module的对象,module对象中有一个含有一个名为exports的成员变量
在导出模块时,需要往exports对象中添加需要导出的属性和方法
对于es6中的模块方法,我们可以通过import来导入模块,通过export和export default来导出模块,并可以使用解构赋值等新特性来使得导入导出更加便捷