国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

寫給后端看的前端技術——webpack(上)

開發(fā) 開發(fā)工具
我決定用webpack作為學習前端的第一步,一方面是由于“Build工具”幾乎是學習前端的第一道門檻;另一方面它已經(jīng)“千秋萬代一統(tǒng)江湖”了所以請無視——gulp、grunt之類的吧。

不懂“前端”說的virtual dom、ReactJS、Vue、Angularjs這一大堆東西,也不懂前端說的ES6的優(yōu)雅,也不知道為啥我用Bootstrap、jQuery就得“剁手”。世界上總得有一篇文章是寫給后端工程師看的,后端寫給后端看的,不裝逼,認認真真。

我決定用webpack作為學習前端的第一步,一方面是由于“Build工具”幾乎是學習前端的第一道門檻;另一方面它已經(jīng)“千秋萬代一統(tǒng)江湖”了所以請無視——gulp、grunt之類的吧。

[[184087]]

一、前端工具鏈和Webpack

工具鏈是前端經(jīng)常被吐槽的一個梗,我認為這不是前端技術更新太快,而是前端技術通俗易懂——山寨個輪子分分鐘的事情。用別人的工具不如自己做一個——多有面子。(或許這就是“文人相輕”吧)。用一幅圖表示webpack的位置

用一幅圖表示webpack的位置

支撐整個B/S系統(tǒng)技術由三個組成——HTML、CSS、JavaScript。其中JavaScript比較特殊,借助V8引擎它可以被放到服務器端執(zhí)行這就會Node.js。Node.js之于JavaScript猶如JVM之于Java,它為JavaScript提供了一個“運行環(huán)境”,這就給出了一個信號——我們可以用JavaScript做更多事情。

最開始嘗試的是用Node.js寫服務器端,這場運動造就了另一個東西——npm(Node Package Manager),通過npm定義的規(guī)范為JavaScript引入了“包”的概念,刺激了社區(qū)的發(fā)展一時間社區(qū)出現(xiàn)了非常豐富的、可以復用的庫(比如,出現(xiàn)了Express之類的Web Framework、甚至是ORM Framework)。

有了Node.js、npm之后進入了“全面造輪子”的時代,各種工具、各種庫、各種場景野蠻生長。其中有一小撮群眾迫切的需要一個“打包工具”。JavaScript代碼、CSS代碼越來越多我們期望能夠有一個工具可以合并JavaScript、合并CSS,如果可能捎帶“壓縮”一下大小。當然這種事情用Python、Java都可以做到問題是——“用別人家的語言多丟人啊”,我們現(xiàn)在有了Node.js分分鐘自己寫一個。于是就有了gulp、grunt、webpack之類的,當然這些工具功能更多(比如合并小圖片、作為開發(fā)服務器)但是它本質上還是一個“打包工具”(Python的PIP、Java的Maven)。

二、npm

就像前面說的那樣,你使用webpack必須安裝node.js——它是用JavaScript寫的一個工具所以必須要有運行環(huán)境。完整完node.js后你會驚喜的發(fā)現(xiàn)多了一個npm(恩,買一送一)——畢竟現(xiàn)在一個語言不帶上“包管理”都不好意思說自己是“現(xiàn)代編程語言了”。

首先我們需要一個符合npm標準的工程

符合npm標準的工程

npm的規(guī)范很簡單,只要你有一個package.json的配置文件就可以了,我們通過npm init來幫我們生成了一個。接下來用編輯器打開package.json就行了。

你可能已經(jīng)猜出了了很多東西(沒猜到?請瀏覽npmjs.com上的package.json來理解每個配置項的含義)。我們重點關注script,它可以讓我們利用npm執(zhí)行命令行(Shell),我來修改一下代碼

利用npm執(zhí)行命令行(Shell)

然后執(zhí)行

npm的日志

以“>”開頭的輸出是npm的日志,最后的一句話才是“echo”執(zhí)行的結果。

三、初探webpack

1. 前期準備

為了便于實驗我準備了兩個文件——index.js、index.html

index.js、index.html

index.html

index.html

index.js

index.js

用瀏覽器打開index.html就可以看到彈出的對話框了。

2. 初探Webpack

webpack是npm的一個標準庫,所以通過npm安裝它,指定--save-dev參數(shù)會自動修改package.json添加依賴(npm會在當前目錄創(chuàng)建一個node_modules文件夾,webpack和它的依賴都放在這里,你如果膽子大進去看一下目錄吧。恩,就是這么神奇。。就是這么多依賴~~~~)。

webpack是npm的一個標準庫

安裝完成后package.json被添加了webpack的依賴關系。(dev不用猜你也知道了,這是“開發(fā)環(huán)境”依賴,npm在執(zhí)行打包的時候不會把它復制到生產(chǎn)環(huán)境,也就是說webpack其實是一個“開發(fā)工具”。)

webpack的依賴關系

webpack提供了一個命令行腳本路徑是node_modules/webpack/bin/webpack.js,我們可以直接在shell中執(zhí)行這個js文件。(打開它你會發(fā)現(xiàn)第一行是#!/usr/bin/env node,所以它其實是由NodeJS執(zhí)行的)現(xiàn)在讓webpack幫我們“打包”index.js,生成的文件叫bundle.js

bundle.js

修改index.html

修改index.html

程序是正常工作的,以后我們對外發(fā)布的時候不再使用main.js而是使用bundle.js。

四、引入jQuery

下面修改代碼,在頁面中放入一個按鈕,通過jQuery綁定按鈕的Click事件,點擊之后彈出Hello。首先需要添加jQuery依賴,通過--save讓npm保存jQuery依賴,這里沒有執(zhí)行dev所以jQuery會被帶到生產(chǎn)環(huán)境

jQuery

index.html

index.html

index.js

index.js

特別解釋一下第一句,這個是JavaScript的“模塊化”。JavaScript語言沒有模塊(或者叫“包”)、類等模塊化的概念這就給大家留下了很多想象空間,nodejs定義了require用來支持模塊化,通過這個語句會自動引入jquery.js文件(讀取node_modules/jquery/package.json中的main字段)——這就是CommonJS。但是NodeJS不能工作在瀏覽器段,于是就有了瀏覽器端的“模塊化”——AMD、CMD之類的。時至今日ES6已經(jīng)作為JavaScript的新規(guī)范被大家接受,它終于引入了模塊化的語法——import xx from xx。

webpack同時支持CommonJS、ES6兩種語法,打包的時候會把所有的JavaScript和相關資源重新組合(比如合并JavaScript文件,合并小圖片,合并CSS),我們可以選擇一次性加載所有JavaScript也可以通過插件分成若干個Chunk加載。

在webpack中兩種語法沒有什么本質區(qū)別,我習慣性的會選擇require作為主要的方式,它可以指定完整路徑名非常便于兼容非npm模塊,還可以引入css文件、圖片,寫法也更加清晰。項目里有ES6的時候我會選擇用import語法。

繼續(xù)執(zhí)行webpack生成build.js,這次我們會看到一些關于jquery的信息。

jquery的信息。

打開頁面刷新、點擊、程序是正常工作的,打開buildle.js看一下是不是發(fā)現(xiàn)webpack把jquery.js和我們的代碼合并到一起了?

4. 自動化

上面我們編輯完代碼之后還需要自己執(zhí)行一下webpack,刷新頁面。我們希望編輯index.js后希望可以自動觸發(fā)webpack編譯輸出dist/build.js,為了實現(xiàn)這個必須引入兩個東西

  • webpack.config配置文件
  • webpack-dev-server插件

一直來我們都是通過命令行指定“源JavaScript”和“目標JavaScript”,現(xiàn)實中我們一般是通過配置文件指定的就是——webpack.config.js

webpack.config.js

現(xiàn)在執(zhí)行node_modules/webpack/bin/webpack.js不加參數(shù),webpack就會使用這個配置文件了。每次都輸入這么長的名字也是比較煩的,我們可以通過npm來調(diào)用webpack。仔細想想npm中的scripts定義的都是shell命令,所以我們可以修改成

npm執(zhí)行命令行的時候會把node_modules下的一些bin目錄(比如 webpack的是node_modules/webpack/bin)加入到PATH環(huán)境變量中而且允許以.js結尾的文件不指定后綴名。所以build這里我們直接寫一個webpack就行了。(webpack其實是寫成node_modules/webpack/bin/webpack.js的縮寫)

通過npm 執(zhí)行build

通過npm 執(zhí)行build

我們希望webpack可以自動“檢查”index.js,發(fā)現(xiàn)更新后可以自動編譯。這時候就必須安裝web-dev-server這個插件了

web-dev-server

修改webpack.config.js

修改webpack.config.js

新增了devServer部分,publicPath指定了“發(fā)布路徑”。webpack-dev-server會檢測index.js的變化輸出的時候并不是把目標文件寫到硬盤中而是在內(nèi)存里,此處指定輸出的文件是bundle.js,如果不指定publicPath,我們訪問它的路徑應該是localhost:3000/bundle.js。訪問index.html的路徑是localhost:3000/index.html,而HTML引入的路徑是dist/bundle.js所以此處指定publicPath。(webpack-dev-server輸出路徑就會變成localhost:3000/dist/bundle.js,剛好和html呼應)

修改package.json,引入新的run命令

修改package.json,引入新的run命令

執(zhí)行npm run build會輸出文件到dist/bundle.js用于發(fā)布生產(chǎn),執(zhí)行npm run start會執(zhí)行dev-server,不使用硬盤上的bundle.js用于開發(fā)測試。

(你可以已經(jīng)猜到了webpack-dev-server也有一個bin目錄,它的原理和webpack在script字段中的原理是一樣的)

五、代碼

https://github.com/fireflyc/front-demo/tree/v1

【本文是51CTO專欄作者“邢森”的原創(chuàng)文章,轉載請聯(lián)系作者本人獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO.com
相關推薦

2019-09-27 14:33:34

2020-06-22 07:56:15

前端開發(fā)技術

2019-07-29 16:05:48

前端DockerNode.js

2020-03-03 15:17:40

進程線程調(diào)度

2020-03-01 16:05:08

操作系統(tǒng)文件

2016-01-05 10:30:59

后端程序員緩存原理

2019-11-29 16:25:00

前端正則表達式字符串

2020-03-02 14:49:09

數(shù)據(jù)分析數(shù)據(jù)采集數(shù)據(jù)處理

2019-12-18 10:30:24

前端開發(fā)技術

2022-08-08 15:45:44

JavaPromise前端

2018-08-03 12:52:51

首頁彈窗iOS

2020-10-08 18:20:54

前端后端架構

2020-11-19 09:00:00

技術債開發(fā)工程

2020-03-04 15:44:36

數(shù)據(jù)分析統(tǒng)計分析數(shù)據(jù)模型

2022-09-05 14:45:56

前端K8S

2021-08-30 11:29:36

Webpack H5 C3

2021-05-27 05:22:28

前端引擎平臺

2020-07-29 08:26:40

Webpack前端模塊

2023-04-10 15:14:03

2015-10-10 10:01:28

前端模塊化webpack
點贊
收藏

51CTO技術棧公眾號

伊人久久精品视频| 日韩视频永久免费| 亚洲一区二区免费| 黄色精品视频| 婷婷国产v国产偷v亚洲高清| 妺妺窝人体色www看人体| 亚洲精品一二三区区别| 欧美激情影音先锋| 中文在线а√天堂| 欧美日韩精品欧美日韩精品一| 污视频网站免费| 国产一区二区三区蝌蚪| 久久66热这里只有精品| 日韩激情图片| 海角国产乱辈乱精品视频| 国产精品扒开腿做爽爽爽视频软件| 欧美日韩久久久| 伪装者在线观看完整版免费| 国产精品国产自产拍高清av王其| 大荫蒂性生交片| 国产亚洲精品自拍| 7777精品伊久久久大香线蕉语言| 澳门久久精品| www.美女亚洲精品| 春暖花开亚洲一区二区三区| 亚洲国产精品系列| 菠萝菠萝蜜在线视频免费观看| 一道本成人在线| 在线观看免费观看在线91| 成人欧美一区二区三区小说| 凹凸国产熟女精品视频| av一区二区久久| 女人被男人躁得好爽免费视频 | 一区二区三区在线免费看 | 国产婷婷精品| 亚洲永久免费观看| 九九亚洲精品| 久久久久久久久久久久av| 成人黄色在线| 亚洲欧美日韩天堂一区二区| 不卡av播放| 亚洲色图欧美制服丝袜另类第一页| 中国av在线播放| 日韩免费在线观看| zzzwww在线看片免费| 制服丝袜成人动漫| 最新真实国产在线视频| 欧美日韩专区在线| 精精国产xxxx视频在线| 国产成人av电影在线| 四虎免费在线观看视频| 国产精品影视网| 久久久久人妻精品一区三寸| 久久精品在线免费观看| 99热手机在线观看| 亚洲国产成人精品视频| 欧美黄色小说| 日韩一级二级三级| 热色播在线视频| 久久精品国产99国产精品澳门| 国产人与zoxxxx另类91| 在线成人h网| 成人h动漫免费观看网站| 国产在线观看黄| 中文字幕亚洲欧美一区二区三区| 麻豆一二三区精品蜜桃| 亚洲免费影视第一页| 午夜激情电影在线播放| 中文字幕精品久久久久| 999久久久精品一区二区| 欧美一区二区视频97| 日韩欧美精品一区| 国产综合色一区二区三区| 日韩激情一区二区| 99热亚洲精品| 亚洲麻豆国产自偷在线| av电影在线网| 亚洲天堂av在线免费观看| 激情小说一区| 国产区一区二区三区| 国产在线播精品第三| 伊人国产在线视频| 欧美这里有精品| 精品123区| 国产精品啪视频| 日韩国产在线观看一区| 成人三级视频在线播放 | 高清av免费一区中文字幕| 日本在线观看不卡视频| 国产一区二区三区精彩视频| 亚洲自拍偷拍欧美| 亚洲精品免费在线看| 国产麻豆欧美日韩一区| 日韩精品一区二区三区久久| 制服丝袜成人动漫| 999视频精品| 欧美草逼视频| 污视频在线免费观看网站| h网站视频在线观看| 精品无码国模私拍视频| 欧美夫妻性生活xx| 久久66热re国产| 免费的av电影| 亚洲精品美女久久7777777| 久久久久久综合网天天| 国产成人av网站| av片在线观看| 免费成人在线观看av| 欧美经典三级视频一区二区三区| 亚洲伦理在线| 欧美精品在线一区二区| 亚洲一级大片| 国产精品专区一| 中文字幕一区二区三区在线播放 | 国产精品极品美女在线观看| 高清一区二区三区日本久| 成人高清在线视频| 国产精品久久久久久av公交车| 成人影院一区二区三区| 成人黄色影片在线| 亚洲一卡二卡区| 国产欧美一区二区三区另类精品| 福利一区福利二区| 日本免费一区二区三区最新| 日韩中文字幕在线精品| 欧美在线精品一区| 性欧美1819| 在线成人激情黄色| 先锋亚洲精品| 欧美少妇另类| 人九九综合九九宗合| 成人爽a毛片一区二区免费| 欧美性videos| 成人性教育视频在线观看| 国产亚洲成年网址在线观看| 美足av综合网| 国产综合精品一区二区三区| 一区二区三区色| 成人av动漫| 国产九九九九九| 亚洲成人精品视频| 亚洲激情女人| 日韩a在线观看| 国产精品久久91| 欧美激情一区二区三区全黄| 91在线亚洲| 欧美日韩一级在线| 日韩午夜在线播放| 亚洲福利一区| 日本1级在线| 成人黄色免费在线观看| 久久久亚洲精品视频| 午夜电影一区二区三区| 国产一区二区三区美女| 亚洲一级一区| 亚洲爽爆av| 黄视频在线观看网站| 91精品国产91久久久久麻豆 主演| 欧美日韩亚洲一| 九色网友自拍视频手机在线| 婷婷综合国产| 一级视频在线观看视频在线啦啦| 人人干视频在线| 97福利网站在线观看视频| 在线视频中文字幕第一页| 成人盗摄视频| 日韩不卡一二三区| |精品福利一区二区三区| 精品99一区二区| 国产成+人+综合+亚洲欧美丁香花| 色涩成人影视在线播放| 最新av在线| 91欧美日韩在线| 国产一区二区视频在线播放| 欧美日韩国产精品专区| 亚洲免费成人av电影| 精品国产自在久精品国产| 色噜噜久久综合| 日本乱人伦aⅴ精品| 91久久人澡人人添人人爽欧美| 欧美性猛交xxxx免费看| www.99精品| 欧美视频观看一区| 男人天堂网在线| 韩日精品一区| 午夜精品亚洲| 欧美精品一区二区久久久| 欧美性xxxxxx| 黄页网站大全在线免费观看| 亚洲国产日韩欧美| 亚洲视频专区在线| 国产精品成人一区二区艾草 | 国产主播一区二区| 丁香花高清在线观看完整版| 伊人久久大香线蕉成人综合网| 亚洲夜晚福利在线观看| wwwwww.欧美系列| 国产一区二区三区四区五区 | 欧美激情日韩图片| 精品高清一区二区三区|