CommonJS ES Module的导入导出

导入
// 入口文件./src/index.js
const sum = require('./add.js')
console.log(sum(2,3)) // 5

模块加载机制,如果一个模块是第一次被加载,那么会执行该模块并导出内容,如果该模块被执行过,那么这个模块的代码不会再被执行,而是直接导出上次执行的结果。
require可以接受表达式,动态制定模块路径

导出

在CommonJs中每个文件都是一个模块,模块的作用域是属于自身的,而一个模块向外暴露的唯一方式是导出,在CommonJs中导出的是module.exports对象,

var module ={exports: {}}// 可以理解为一开始定义了一个module对象
module.exports = {
   name: 'jack',
   add: function(a, b){return a+b}
}

为了方便直接用exports,这种简写跟使用module是一样的

//定义了module之后,可以理解为在开头将exports指向了module.exports
var exports = module.exports 
exports.name = 'jack'

所以当我们给exports直接赋值后会导致其失效,因为始终导出的都是module.exports

ES6 Module

es6也是将每一个文件当做模块,导入导出语句是import export,会自动开启use strict控制严格模式。

导入
//命名式 需要有大括号
import { add } from './add.js'
// 默认导入 等同于 import { default as myAdd } from './add.js'
import myAdd from './add.js'
//混合导入
import add, {name} from './add.js'
//全部导入
import * as add from './add.js' 
导出
//写法1
const add = function(a,b) {return a+b}
export { add }
//写法2
export { add: function (a,b) {return a+b} }
//默认导出
export default function(a,b) {return a+b}
//混合写法
export const add = function(a,b) {return a+b}

下一节 entry output配置:https://www.jianshu.com/p/386e61521d32

你可能感兴趣的:(CommonJS ES Module的导入导出)