一、簡介babel
Babel是一個廣泛使用的轉碼器,可以將ES6代碼轉為ES5代碼,從而在現有環境執行。
目前node已經基本支持大部分es6的語法,例如const、let、箭頭函數、new Set()、new Map()、new Promise()、async、await、arr.map()和arr.filter()等等
ES6、ES7支持一覽表
,所以自己總結下
二、簡介CommonJS和ES6 Module
- CommonJs
Node.js遵循著CommonJS規范,它有四個重要的環境變量為模塊化的實現提供支持:module、exports、require、global。
console.log(module)
Module {
id: '.',
exports: {},
parent: null,
filename: 'E:\\desktops\\node_test\\index.js',
loaded: false,
children: [],
paths:
[ 'E:\\desktops\\node_test\\node_modules',
'E:\\desktops\\node_modules',
'E:\\node_modules' ]
}
exports就是module的一個屬性
// a.js
exports.fn = () => {console.log('fn')} === module.exports.fn = () => {console.log('fn')}
或者 module.exports = {fn: () => { console.log('fn')}}
// index.js
var test = require(./a.js)
test.fn()
// fn
a.js中的兩種暴露接口的方法,前者只是在該module下的exports對象中添加了fn屬性,未改變module.exports對象指針,還是原來的對象,后者module.exports重新賦值一個新對象,效果一樣
- ES6 Module
ES6 在語言標準的層面上,實現了模塊功能,而且實現得相當簡單,旨在成為瀏覽器和服務器通用的模塊解決方案。其模塊功能主要由兩個命令構成:export和import。
// a.js
export const MAX_NUB = 20
// b.js
import { const } from './a.js'
// a.js
export default {
fn: () => {
console.log('fn')
}
}
// b.js
import fn from './a.js'
// a.js
const MAX = 20
const MIN = 5
export { max: MAX,min: MIN}
// b.js
import {max,min} from './a.js'