<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在最原始的前端開發中,我們引入js和css等檔案都是通過手動地在html中插入script和link標籤來達到參照的目的,不僅繁瑣,每個檔案都需要單獨發一次請求,而且容易發生變數衝突的問題。
於是提出了JavaScript模組化的概念,依次出現了AMD、CommonJS、CMD、ES6模組化等解決方案。
但是事實上,我們工程使用模組化開發是不能直接執行在瀏覽器上的,例如許多npm模組都是使用的CommonJS的語法,瀏覽器並不支援。
此時便到了模組打包工具出場的時候了,它的任務就是解決模組間的依賴,並將專案打包成瀏覽器能夠識別的JS檔案。
目前社群流行的打包工具有Webpack、Parcel、Rollup等。
如果你使用過vue-cli或者create-ract-app等腳手架,那麼其實你已經用過webpack了,因為他們都是基於webpack的二次封裝,所以,掌握了webpack的原理,能夠更好地去開發vue和react工程專案。
專案中webpack的組態檔是位於根目錄的:webpack.config.js
入口起點(entry point)指示 webpack 應該使用哪個模組,來作為構建其內部依賴圖的開始,例如vue專案中的main.js就是打包時的入口檔案。
module.exports = { entry: './src/main.js' };
專案中的所有依賴都應該直接或者間接地與入口檔案關聯起來,例如我們都是在main.js中引入外部模組(axios、router、elementUI等)。
output
屬性告訴 webpack 在哪裡輸出它所建立的 bundles
,以及如何命名這些檔案,預設值為 ./dist。
const path = require('path'); module.exports = { entry: './src/main.js', output: { //__dirname是當前目錄根目錄 path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' } };
loader 讓 webpack 能夠去處理那些非 JavaScript 檔案(例如圖片,css檔案、vue檔案等,webpack 自身只理解 JavaScript)。
loader 可以將所有型別的檔案轉換為 webpack 能夠處理的有效模組,然後你就可以利用 webpack 的打包能力,對它們進行處理。
module.exports = { //... module: { rules: [ { test: /.css$/, use: ['style-loader','css-loader'] } ] } };
在 webpack 設定中定義 loader 時,要定義在 module.rules 中,其中test屬性是需要匹配的檔名的正則,use屬性是對應的loader,可以是多個(陣列)。
例如上面的style-loader和css-loader就是處理js中引入的css檔案(如果直接在js中引入css檔案,是會報錯的)。
oader 被用於轉換某些型別的模組,而外掛則可以用於執行範圍更廣的任務。
外掛的範圍包括,從打包優化和壓縮,一直到重新定義環境中的變數,外掛增強了webpack的功能。
要使用外掛,對於webpack內建的外掛,我們通過引入webpack然後直接存取內建外掛即可,對於外部外掛,我們需要先安裝,然後require引入,然後在plugin陣列引入外掛(new)範例。
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通過 npm 安裝 const webpack = require('webpack'); // 用於存取內建外掛 const config = { module: { rules: [ //... ] }, plugins: [ new HtmlWebpackPlugin({template: './src/index.html'}) ] }; module.exports = config;
上面的html-webpack-plugin外掛就是根據模板(template
)頁面在打包的目錄中自動生成一個對應的html檔案,並且自動插入打包生成js檔案的script標籤(正常webpack打包並不會生成html檔案)。
module.exports = { mode: 'production' };
即打包的模式不同,那麼webpack對於打包程式碼的優化策略也不一樣。
我們來搭建一個非常簡單的webpack專案
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45