三种模块导入导出

RequireJS

define(['module1', 'module2'], function(m1, m2) {
   ...
});
require(['foo', 'bar'], function ( foo, bar ) {
        foo.doSomething();
});

CommonJS

可以导出任何类型:

module.exports = {
    name: 'banana',
    age: 18,
    eat: function(){
        console.log('I like eating banana')
    }
}

module.exports.userName = 'admin'

CommonJS导入:

const obj = requier('./module.js')
console.log(obj)

ES Module

导出

const obj = {
    name: 'banana',
    age: 18,
    eat:() => {
        console.log('I like eating banana')
    }
}
const userName = 'admin'
export { obj, userName }

导入

import { obj,userName } from './module.js'

通过 as 重命名

const usrename = 'admin'
const password = '123456'
export {
    usrename as name,
    password as pass
}
import { name, pass} from './module.js'

默认导出 export default

// ./module.js
const usrename = 'admin'
export default name
import newname from './module.js'

默认导出多个成员

export default {
    name: 'banana',
    age: 18
}
import handle from './module.js'
console.log(handle.name) //banana
handle.eat() // i like eating bananas

当要导出大量成员时,可以用一个变量来接收

export { name, age, address,...}

import * as obj from './module.js'

同时导出命名成员和默认成员:

const name = 'banana',age = 18
export { name, age}
export default 'default value'
// 第一种
import { name, age, default as title} from './module.js'
// 第二种
import title , { name, age} from './module.js'

ES Module 注意点: 当我们只想运行模块,而不是获取其中的变量时,可以写

  • import './module.js'
  • 通过给script标签添加 type="module" 属性 <script src="./module.js" type="module">