模塊是自動運行在嚴格模式下而且沒有辦法退出運行的JavaScript代碼。vue
模塊能夠是函數、數據、類,須要指定導出的模塊名,才能被其餘模塊訪問。react
//數據模塊 const obj = {a: 1} //函數模塊 const sum = (a, b) => { return a + b } //類模塊 class My extends React.Components { }
給數據、函數、類添加一個export,就能導出模塊。一個配置型的JavaScript文件中,你可能會封裝多種函數,而後給每一個函數加上一個export關鍵字,就能在其餘文件訪問到。webpack
//數據模塊 export const obj = {a: 1} //函數模塊 export const sum = (a, b) => { return a + b } //類模塊 export class My extends React.Components { }
在另外的js文件中,咱們能夠引用上面定義的模塊。使用import關鍵字,導入分2種狀況,一種是導入指定的模塊,另一種是導入所有模塊。web
一、導入指定的模塊。segmentfault
//導入obj數據,My類 import {obj, My} from './xx.js' //使用 console.log(obj, My)
二、導入所有模塊瀏覽器
//導入所有模塊 import * as all from './xx.js' //使用 console.log(all.obj, all.sun(1, 2), all.My)
若是給咱們的模塊加上default關鍵字,那麼該js文件默認只導出該模塊,你還須要把大括號去掉。babel
//默認模塊的定義 function sum(a, b) { return a + b } export default sum //導入默認模塊 import sum from './xx.js'
不能在語句和函數以內使用export關鍵字,只能在模塊頂部使用,做爲react和vue開發者的你,這個限制你應該很熟悉了。函數
在react中,模塊頂部導入其餘模塊。插件
import react from 'react'
在vue中,模塊頂部導入其餘模塊。code
<script> import sum from './xx.js' </script>
有2種修改方式,一種是模塊導出時修改,一種是導入模塊時修改。
一、導出時修改:
function sum(a, b) { return a + b } export {sum as add} import { add } from './xx.js' add(1, 2)
二、導入時修改:
function sum(a, b) { return a + b } export sum import { sum as add } from './xx.js' add(1, 2)
當你的模塊沒有可導出模塊,全都是定義的全局變量的時候,你可使用無綁定導入。
模塊:
let a = 1 const PI = 3.1314
無綁定導入:
import './xx.js' console.log(a, PI)
有用過webpack打包js模塊的同窗可能有經驗,使用webpack打包了多個js文件,而後放到HTML使用script加載時,若是加載順序不對,就會出現找不到模塊的錯誤。
這是由於模塊之間是有依賴關係的,就像你使用jQuery的時候,必須先加載jQuery的代碼,才能使用jQuery提供的方法。
加載模塊的方法,老是先加載模塊1,再加載模塊2,由於module類型默認使用defer屬性。
<script type="module" src="module1.js"></script> <script type="module" src="module2.js"></script>
模塊還有不少有意思的特性,對react和vue開發有必定經驗的人對這些基本知識應該瞭如指掌,新手不瞭解也不用太心急,寫幾個module.js作一下嘗試。若是瀏覽器報錯,不能識別export模塊,你可能須要先加載babel的js插件來編譯它。