成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Webpack 原理與實踐之如何通過 Loader 加載器進行資源加載?

開發(fā) 前端
我們知道webpack其實不僅是javascript模塊打包工具,更是整個前端項目即前端工程的模塊打包工具,可以通過webpack去管理前端項目中任意類型的資源文件。

[[440887]]

寫在前面

我們知道webpack其實不僅是javascript模塊打包工具,更是整個前端項目即前端工程的模塊打包工具,可以通過webpack去管理前端項目中任意類型的資源文件。

如何加載資源模塊

首先,我們在項目的src目錄下添加一個樣式文件main.css。目錄結(jié)構(gòu)如下:

  1. |--03-loader  
  2.   |--src 
  3.     |--main.css 
  4.   |--package.json 
  5.   |--webpack.config.js 
  1. /* main.css */ 
  2. body{ 
  3.   margin:0 auto; 
  4.   padding:0 20px; 
  5.   max-width:800px; 
  6.   background:yellow; 

接下來,在webpack.config.js配置中的入口文件路徑進行更改為main.css文件路徑,執(zhí)行webpack直接進行打包css資源文件。

  1. const path = require("path"
  2.  
  3. module.exports = { 
  4.   // 樣式文件路徑 
  5.   entry:"src/main.css"
  6.   output:{ 
  7.     filename:"bundle.js"
  8.     path:path.join(__dirname,"output"
  9.   }, 
  10.   mode:"none" 

如果我們不進行其他的任何配置,此時直接執(zhí)行打包命令,會報錯提示我們報錯,因為只能是使用js文件作為打包入口。之所以會這樣,那是因為在webpack中默認解析的是js語法,而對于非js語法需要先進行Loader,再在配置文件中另外進行配置loader。

css文件通過css-loader進行處理,再提交給webpack進行打包生成js文件。

  1. $ npm i css-loader -D 

但是,當你此時執(zhí)行打包命令后,嘗試在你頁面中使用生成bundle.js文件,會發(fā)現(xiàn)剛剛的main.css模塊并沒有起作用,那么我們需要額外添加一個style-lodaer加載器,這樣就能正常工作了。樣式?jīng)]有生效的原因是:css-loader只會把css模塊加載到js代碼中,而不會直接使用此模塊。

那么,在你安裝完style-lodaer后,將配置文件中的use屬性修改為數(shù)組,將style-lodaer也配置進去。因為loader數(shù)組的加載順序是自下而上的,所以style-lodaer應該配置在css-loader上面。

  1. //main.js 
  2. import "./style.css" 
  3.  
  4. console.log("hello yichuan"); 
  1. /* style.css */ 
  2. body{ 
  3.   margin:0 auto; 
  4.   padding:0 20px; 
  5.   max-width:800px; 
  6.   background:yellow; 

loader加載器是整個webpack打包配置的核心,因為需要通過它去實現(xiàn)任意類型文件的打包,這樣最后都進行打包生成了js文件。

那么,為什么webpack要在js中載入css文件,而不是將樣式文件和行為進行分離?

這是因為,真正需要其他資源的并不是整個項目中,而是某個模塊需要使用。

假設在進行頁面開發(fā)某個局部功能時,需要使用到一個樣式模塊和一個圖片文件,如果你還是將這些資源單獨引入到html文件中,然后再到js中添加對應的邏輯代碼,試想如果后期不需要這個局部功能,那么就需要同時刪除JS中的代碼和html中的資源文件引入,也就是需要同時維護多條線。然而,此時你遵循webapck的導入設計,所有資源加載都是通過js代碼控制,那么后期只需要維護js代碼就行。

為什么要建立這種JS文件導入其他資源的依賴關(guān)系,這是因為:

邏輯上比較合理:因為JS確實需要這些資源文件配合才能實現(xiàn)整體功能

配合webapck這類工具的打包:能夠確保在上線時,資源不會缺失,而且都是必要的。

接下來,我們進行簡易的loader開發(fā),目標是實現(xiàn)對md文件的打包。

  1. // index.js 
  2. import mrakdown from "hello.md" 
  1. <!-- hello.md --> 
  2. ## 你好呀 
  1. //md-loader.js 
  2. const md = require("./hello.md"
  3.  
  4. module.exports = source => { 
  5.   // 加載到的模塊內(nèi)容 
  6.   console.log("加載到的模塊內(nèi)容==>",source); 
  7.   // 返回值就是最終打包的結(jié)果 
  8.   return "你好呀" 
  1. //webpack.config.js 
  2. const path = require("path"
  3. module.exports = { 
  4.   // 樣式文件路徑 
  5.   entry:"./src/index.js"
  6.   output:{ 
  7.     filename:"bundle.js" 
  8.   }, 
  9.   mode:"none"
  10.   module:{ 
  11.     rules:[{ 
  12.       test:/\.md$/,//根據(jù)打包過程中所遇文件路徑記性匹配是否使用此loader 
  13.       use:"./md-loader"//指定具體使用的loader 
  14.     }] 
  15.   } 

此時執(zhí)行打包命令后報錯,提示我們加載對應的loader。這是因為打包的每個loader形成一個鏈條,每個loader都依賴于另一個loader的引入,最終打包出來的必須是js文件。對此,我們有處理方法:

  • 將我們自定義的md-laoder加載器的輸出設置為js語法
  • 安裝對應的loader加載器
  1. module.exports = source => { 
  2.   // 加載到的模塊內(nèi)容 
  3.   console.log("加載到的模塊內(nèi)容==>",source); 
  4.   // 返回值就是最終打包的結(jié)果 
  5.   return "console.log('你好呀')"

那么當我們使用合適的Loader加載器將md文件解析為html模塊,需要先進行安裝marked,安裝完后在md-loader.js導入模塊,然后進行解析。

  1. $ npm i marked 
  1. //./md-loader.js 
  2. const marked = require("marked"
  3.  
  4. module.exports = source => { 
  5.   // 1.將md文件轉(zhuǎn)為html字符串 
  6.   const html = marked(source); 
  7.   return `export default ${JSON.stringify(html)}` 

參考文章

《webpack原理與實踐》

《webpack中文文檔》

寫在最后

 

loader機制是webpack核心內(nèi)容,因為有了loader機制webpack才能足以支撐整個前端項目模塊化,實現(xiàn)通過webpack去加載任何想要的資源。

 

責任編輯:武曉燕 來源: 前端萬有引力
相關(guān)推薦

2021-05-31 05:36:43

WebpackJavaScript 前端

2021-12-20 00:03:38

Webpack運行機制

2021-12-16 22:02:28

webpack原理模塊化

2021-12-24 08:01:44

Webpack優(yōu)化打包

2021-12-15 23:42:56

Webpack原理實踐

2025-04-29 02:30:00

面板驗證瀏覽器

2020-12-03 10:40:23

webpack加載原理前端

2021-12-22 22:44:49

Webpack熱替換模塊

2021-12-19 07:21:48

Webpack 前端插件機制

2021-12-25 22:29:04

WebpackRollup 前端

2017-11-21 14:56:59

2017-08-03 12:50:49

Web圖片資源瀏覽器

2017-03-24 10:56:21

Webpack技巧建議

2017-05-02 16:29:11

Webpack技巧建議

2021-10-24 06:50:52

AndroidClassLoaderJava

2009-10-27 10:28:33

Silverlight

2021-12-21 14:00:25

WebpackDevServer的開發(fā)

2023-10-25 10:21:24

瀏覽器HTTP請求

2017-03-28 10:11:12

Webpack 2React加載

2021-03-19 06:31:06

vue-lazyloa圖片懶加載項目
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91久久久久久久久久久久久 | 美女爽到呻吟久久久久 | 日韩av免费看| 日本中文字幕在线观看 | 亚洲视频一区二区三区 | 81精品国产乱码久久久久久 | 免费观看av| 男女黄网站 | av黄色片在线观看 | 在线国产视频 | 最新免费视频 | 日韩成人免费视频 | 午夜视频免费在线 | 91国产视频在线观看 | 精品视频亚洲 | 婷婷在线网站 | 狠狠天天| 日本视频在线 | 米奇7777狠狠狠狠视频 | 在线成人福利 | 日本一二三区在线观看 | 亚洲精品三级 | 久久91精品国产一区二区 | 91视频精选| 成年男女免费视频网站 | 91精品国产91久久久久久三级 | 日韩欧美精品 | 97av视频在线观看 | 懂色中文一区二区在线播放 | 国产精品日本一区二区在线播放 | 精品毛片| 亚洲看片网站 | 不用播放器看的av | 欧美激情精品久久久久久变态 | 在线免费观看视频黄 | 一级免费在线视频 | 亚洲一区二区av在线 | 免费看国产a| 韩国久久 | 一区二区成人 | 在线看亚洲 |