在以前的 javascript 中一直是沒有模塊系統的,前輩們爲了解決這些問題,提出了各類規範, 最主要的有CommonJS和AMD兩種。前者用於服務器,後者用於瀏覽器。而 ES6 中提供了簡單的模塊系統,徹底能夠取代現有的CommonJS和AMD規範,成爲瀏覽器和服務器通用的模塊解決方案。javascript
es6 中新增了兩個命令 export
和 import
, export
命令用於規定模塊的對外接口,import
命令用於輸入其餘模塊提供的功能。java
一個模塊就是一個獨立的文件。該文件內部的全部變量,外部沒法獲取。若是你但願外部可以讀取模塊內部的某個 變量,就必須使用export關鍵字輸出該變量。下面是一個JS文件,裏面使用export命令輸出變量。node
1 |
// math.js |
使用export命令定義了模塊的對外接口之後,其餘JS文件就能夠經過import命令加載這個模塊(文件)。es6
1 |
// main.js |
上面介紹了模塊化最基礎的用法,export 不止能夠導出函數,還能夠導出對象,類,字符串等等npm
1 |
export const obj = { |
export的寫法,除了像上面這樣,還有另一種。json
1 |
let a = 1 |
上面代碼在export命令後面,使用大括號指定所要輸出的一組變量。它與前一種寫法是等價的,可是應該優先考慮使用這種寫法。由於這樣就能夠在腳本尾部,一眼看清楚輸出了哪些變量。瀏覽器
經過 as 改變輸出名稱服務器
1 |
// test.js |
1 |
import { test, b, c} from './test.js' // 改變命名後只能寫 as 後的命名 |
上面啊的寫法中,import
中須要指定加載的變量名或函數名,不然沒法加載。可是,用戶確定但願快速上手,未必願意閱讀文檔,去了解模塊有哪些屬性和方法。babel
export default
指定默認輸出, import 無需知道變量名就能夠直接使用模塊化
1 |
// test.js |
1 |
import say from './test.js' // 這裏能夠指定任意變量名 |
有了export default命令,加載模塊時就很是直觀了,以一些經常使用的模塊爲例
1 |
import $ from 'jQuery' // 加載jQuery 庫 |
import
爲加載模塊的命令,基礎使用方式和以前同樣
1 |
// main.js |
1 |
import {add as sum, subtract} from './test' |
除了指定輸出變量名或者 export.default
定義的導入, 還能夠經過 *
號加載模塊的所有.
1 |
// math.js |
1 |
import * as math from './test.js' |
上面介紹了,es6 中模塊的使用方式,可是如今es6的模塊化,不管在瀏覽器端仍是 node.js 上都沒有獲得很好的支持,因此須要,一些轉碼的工具。使咱們能夠用es6的方式來編碼,最後輸出es5的代碼。
這裏推薦一款基於 es6 模塊化方式的打包神器 rollup,它使用 Tree-shaking
的技術打包,基本能夠作到零冗餘的代碼,並且配置簡單,打包速度也夠快。
首先在 package.json
中加上 rollup
打包依賴的包
1 |
{ |
下面是個人打包程序
1 |
// build.js |
package.json
中加上執行腳本 1 |
{ |
而後,執行命令
1 |
npm run build |
ok 到這裏打包就都結束了。