前端模塊化 —— 如何從傳統(tǒng)走向工程化

前端模塊化的相關(guān)規(guī)范

1. 傳統(tǒng)開發(fā)模式的主要問題

  • 命名沖突:多個JS文件之間如果存在重名的變量則會存在變量的覆蓋問題

  • 文件依賴:JS文件之間無法實現(xiàn)相互的引用

2. 通過模塊化解決上面的問題

  • 模塊化就是把單獨的一個功能封裝到一個文件中

  • 模塊之間相互隔離廉羔,可以通過指定的接口公布內(nèi)部成員依賴別的模塊

3. 瀏覽器端模塊化規(guī)范的嘗試

  1. 瀏覽器端模塊化規(guī)范(已經(jīng)不用了)
  • AMD Require.js

  • CMD Sea.js

  1. 服務(wù)器端模塊化規(guī)范
  • CommonJs(nodeJS還在用這種規(guī)范)
  1. 模塊分為單文件模塊

  2. 導(dǎo)出:module.exports 和 exports

  3. 導(dǎo)入:require('模塊標(biāo)志符')

  4. 大一統(tǒng)的ES6模塊化規(guī)范

  • 值得說明的是崖咨,無論是前端模塊化規(guī)范還是后端的,用的語言都是javascript腾啥,ES6支持了模塊化的寫法 ES6學(xué)習(xí)

  • ES6模塊誕生之前沟优,Javascript社區(qū)已經(jīng)嘗試和提出了上面三種模塊化規(guī)范。不過他們存在著一定的差異性剪菱、局限性耙饰、并不是通用的纹笼,今后統(tǒng)一使用ES6規(guī)范就好了

  • ES6模塊化的定義

    1. 每個JS都是一個獨立的模塊

    2. 導(dǎo)入模塊使用import關(guān)鍵字

    3. 暴露模塊使用export關(guān)鍵字


Node.js通過Babel體驗ES6模塊化

1. 為什么要用Babel

  • Babel是語法轉(zhuǎn)換工具,將高級的有兼容性的JS代碼轉(zhuǎn)換為低級的沒有兼容性的JS代碼苟跪。node.js默認(rèn)支持CommonJS廷痘,對與ES6模塊化規(guī)范支持的并不是很好,所以我們要使用用bebal這個第三方插件件已,更好的使用ES6的高級特性笋额。

2. 安裝babel

  1. Babel提供babel-cli工具,用于命令行轉(zhuǎn)碼篷扩。

  2. babel-node命令可以直接運行ES6代碼兄猩。cli里附帶安裝,不單獨

  3. 如果某些代碼需要調(diào)用Babel的API進行轉(zhuǎn)碼鉴未,就要使用babel-core模塊枢冤。可以用來轉(zhuǎn)碼操作

  4. 舉例來說,ES6在Array對象上新增了Array.from方法歼狼。Babel就不會轉(zhuǎn)碼這個方法掏导。如果想讓這個方法運行,必須使用babel-polyfill羽峰,為當(dāng)前環(huán)境提供一個墊片。

  5. 根據(jù)你支持的環(huán)境自動決定適合你的Babel語法轉(zhuǎn)換插件

  • npm install --save @babel/polyfill

  • 項目根目錄創(chuàng)建文件 babel.config.js

  • npx babel-node index.js

  1. npx 想要解決的主要問題添瓷,就是調(diào)用項目內(nèi)部安裝的模塊梅屉。有了npx我們就不用再用babel-node的相對路徑啟動它了,直接用npx就可以找到并使用這個模塊
  • 這些代碼應(yīng)該理解后手打

模塊的導(dǎo)入與導(dǎo)出

  • 默認(rèn)導(dǎo)入(import m from './m1.js')與導(dǎo)出 (export default {})

    默認(rèn)導(dǎo)入導(dǎo)出只能使用一次,可以與按需導(dǎo)入導(dǎo)出同時使用

    如果被導(dǎo)入為空鳞贷,返回一個空對象坯汤,不會報錯

  • 按需導(dǎo)出export let a = "aaa"與導(dǎo)入import {a} from './m1.js' 按需導(dǎo)出可以改名

  • 導(dǎo)入導(dǎo)出的細(xì)節(jié)

    按需導(dǎo)入導(dǎo)出.jpg

webpack解決當(dāng)前web開發(fā)中面臨的困境

  • 文件依賴關(guān)系錯綜復(fù)雜

  • 靜態(tài)資源請求效率低

  • 模塊化支持不友好

  • 瀏覽器對高級 Javascript 特性兼容程度較低


1. 概述

  • webpack 是一個流行的前端項目構(gòu)建工具(打包工具)。webpack提供了友好的模塊化支持搀愧,以及代碼壓縮混淆惰聂、處理JS兼容問題疆偿、性能優(yōu)化等強大的功能

2. 基本使用

  • 新建項目空白目錄,并運行 npm init –y 命令搓幌,初始化包管理配置文件 package.json 新建 src 源代碼目錄 新建 src -> index.html 首頁 初始化首頁基本的結(jié)構(gòu) 運行 npm install webpack webpack-cli –D 命令杆故,安裝 webpack 相關(guān)的包 在項目根目錄中,創(chuàng)建名為 webpack.config.js 的 webpack 配置文件

3. webpack.config.js的配置格式

import ...
module.exports = {
 mode: '',
 entry:  ,
 output:{
 path:
 filename:
 }
 module:{
 rules:[

 ]
 },
 plugins:[],
}

4. webpack loader與plugins

  • webpack默認(rèn)只能處理JS文件溉愁,如果要要把其他文件打包到JS文件里面去需要用loader加載处铛,文件包括:
    CSS

    LESS

    SCSS

    PostCSS

    JavaScript (打包處理 JS 文件中的高級語法)

    Image/Font

    Vue

  • webpack有很多的插件,可以拓展webpack的功能拐揭,一會在webpack_study里具體說明


5. Vue單文件組件

1. 傳統(tǒng)組件的問題和解決方案

  • 全局定義的組件必須保證組件的名稱不重復(fù)

  • 字符串模板缺乏語法高亮撤蟆,在 HTML 有多行的時候,需要用到丑陋的 \

  • 不支持 CSS 意味著當(dāng) HTML 和 JavaScript 組件化時堂污,CSS 明顯被遺漏

  • 沒有構(gòu)建步驟限制家肯,只能使用 HTML 和 ES5 JavaScript, 而不能使用預(yù)處理器(如:Babel)

針對傳統(tǒng)組件的問題,Vue 提供了一個解決方案 —— 使用 Vue 單文件組件盟猖。

2. 基本語法

  • <template></tmplate>

  • <script></script>

  • <style scoped></style>

3. webpack 中配置 vue 組件的加載器

  • npm i vue-loader vue-template-compiler -D

  • const VueLoaderPlugin = require('vue-loader/lib/plugin')

  • { test: /.vue$/, loader: 'vue-loader' }

  • new VueLoaderPlugin()

Vue腳手架

1.默認(rèn)方式創(chuàng)建腳手架后的目錄分析

Vue-Cli腳手架文件main.js讨衣、App.vue、index.html扒披、index.js詳解

2.配置文件解析

  1. package.json
腳手架配置學(xué)習(xí)1.jpg
腳手架配置學(xué)習(xí)2.jpg
  1. main.js
腳手架配置學(xué)習(xí)3.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末值依,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碟案,更是在濱河造成了極大的恐慌愿险,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件价说,死亡現(xiàn)場離奇詭異辆亏,居然都是意外死亡,警方通過查閱死者的電腦和手機鳖目,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門扮叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人领迈,你說我怎么就攤上這事彻磁。” “怎么了狸捅?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵衷蜓,是天一觀的道長。 經(jīng)常有香客問我尘喝,道長磁浇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任朽褪,我火速辦了婚禮置吓,結(jié)果婚禮上无虚,老公的妹妹穿的比我還像新娘。我一直安慰自己衍锚,他們只是感情好友题,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著构拳,像睡著了一般咆爽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上置森,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天斗埂,我揣著相機與錄音,去河邊找鬼凫海。 笑死呛凶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的行贪。 我是一名探鬼主播漾稀,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼建瘫!你這毒婦竟也來了崭捍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤啰脚,失蹤者是張志新(化名)和其女友劉穎殷蛇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄浓,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡粒梦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荸实。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匀们。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖准给,靈堂內(nèi)的尸體忽然破棺而出泄朴,到底是詐尸還是另有隱情,我是刑警寧澤露氮,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布叼旋,位于F島的核電站,受9級特大地震影響沦辙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讹剔,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一油讯、第九天 我趴在偏房一處隱蔽的房頂上張望详民。 院中可真熱鬧,春花似錦陌兑、人聲如沸沈跨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿凛。三九已至,卻和暖如春软驰,著一層夾襖步出監(jiān)牢的瞬間涧窒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工锭亏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纠吴,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓慧瘤,卻偏偏與公主長得像戴已,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锅减,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361