模塊化是一種處理複雜系統分解爲更好的可管理模塊的方式。通俗的講就是把一個複雜的功能拆分紅多個小功能,而且以一種良好的機制管理起來,這樣就能夠認爲是模塊化。就像做家把書分紅不少章節來寫同樣,程序員寫代碼分模塊來寫也是一種良好的習慣。從本質上來說,一個模塊就是一堆代碼而已javascript
使用模塊化方式寫代碼,有很是多的優勢,例如,可維護性好、避免全局變量污染、可複用性好等,下面咱們來看看es5中如何實現模塊化封裝java
var module1 = (function () { var _count = 0 var fn1 = function () { alert(_count) } var fn2 = function () { console.log(_count) } return { fn1: fn1, fn2: fn2 } })() module1.fn1() //0 module1.fn2() //0 console.log(module1._count); //undefined
在具體寫測試demo以前,咱們須要準備一下環境node
1.進入到項目目錄,初始化項目webpack
npm init -y
2.安裝webpack和webpack-cli程序員
npm install webpack webpack-cli -D
這裏「-D」是「--save-dev」的簡寫web
3.安裝babelnpm
npm install babel-core babel-loader babel-preset-env --save-dev
4.配置babel, 在項目目錄下新建.babelrc文件,而後輸入babel
{ "presets": ["env"] }
4.測試環境是否成功,在項目下新建index.js,寫入代碼模塊化
()=>{console.log(1)}
5.使用webpack打包函數
./node_modules/.bin/webpack --mode development
模塊功能主要由兩個命令構成:export和import。export命令用於規定模塊的對外接口,import命令用於輸入其餘模塊提供的功能。通俗的講export用來導出內容,import用來引入內容
1.導出和導入變量
咱們新建一個modules目錄,在下面新建一個文件a.js寫相關代碼
//導出變量 let username = 'xiaoqiang' let password = '123' export {username, password}
在index.js文件中引入a.js模塊代碼
//導入變量 import {username,password} from './modules/a.js' console.log(username, password)
2.導入和導出函數
//導出函數 export function hello() { return "hello nodeing" }
//導入函數 import {hello} from './modules/a' console.log(hello())
3.導入和導出類
//導出一個類 export class hello{ fn(){ console.log('hello world!!!') } }
//導入一個類 import {hello} from './modules/a' console.log(hello) let obj = new hello() obj.fn()
注意1: 不要直接導出一個值
export 1 //錯誤 let m = 20 export m //錯誤
注意2: 不要直接導出函數或者類
function fn(){} export fn class hello{} export hello
注意3: export語句要在模塊最頂層,放在塊級做用域內會報錯
{ export let a=10 //報錯 }
注意4: 能夠批量接收導出的內容
//導出變量、函數、類 export class hello{ fn(){ console.log('hello world!!!') } } export let A = 10 export function Fn() { console.log(111) }
//批量導入內容,全部的變量 類 函數等都掛載到amodule身上 import * as amodule from './modules/a' console.log(amodule.A, amodule.Fn, amodule.hello)
從前面的例子中,咱們須要思考一個問題,每次使用一個模塊的時候,咱們都須要知道這個模塊裏面到底有哪些變量、函數、類,咱們要根據這些類名來導入,這樣方便麼?爲了更方便的寫代碼,咱們能夠使用export default命令,爲模塊指定默認輸出
//默認輸出變量 let a = 10 export default a
注意: 不要寫成這樣
export default let a = 10 // 報錯
//導入模塊 import aa from './modules/a' console.log(aa)
使用export default命令導出,再導入的時候不用加括號{}, 名字能夠自定義了
推薦的模塊導入導出方式:
//導出內容 let a = 10 function Fn() { console.log(111) } class Hello{ Fn2(){ console.log(111) } } export default { a, Fn, Hello }
//導入內容 import aa from './modules/a' console.log(aa)