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

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

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

[[440887]]

寫在前面

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

如何加載資源模塊

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

  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文件路徑,執行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" 

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

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

  1. $ npm i css-loader -D 

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

那么,在你安裝完style-lodaer后,將配置文件中的use屬性修改為數組,將style-lodaer也配置進去。因為loader數組的加載順序是自下而上的,所以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打包配置的核心,因為需要通過它去實現任意類型文件的打包,這樣最后都進行打包生成了js文件。

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

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

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

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

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

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

接下來,我們進行簡易的loader開發,目標是實現對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.   // 加載到的模塊內容 
  6.   console.log("加載到的模塊內容==>",source); 
  7.   // 返回值就是最終打包的結果 
  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$/,//根據打包過程中所遇文件路徑記性匹配是否使用此loader 
  13.       use:"./md-loader"//指定具體使用的loader 
  14.     }] 
  15.   } 

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

  • 將我們自定義的md-laoder加載器的輸出設置為js語法
  • 安裝對應的loader加載器
  1. module.exports = source => { 
  2.   // 加載到的模塊內容 
  3.   console.log("加載到的模塊內容==>",source); 
  4.   // 返回值就是最終打包的結果 
  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文件轉為html字符串 
  6.   const html = marked(source); 
  7.   return `export default ${JSON.stringify(html)}` 

參考文章

《webpack原理與實踐》

《webpack中文文檔》

寫在最后

 

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

 

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

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優化打包

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

2023-10-25 10:21:24

瀏覽器HTTP請求

2021-12-21 14:00:25

WebpackDevServer的開發

2021-03-19 06:31:06

vue-lazyloa圖片懶加載項目

2017-03-28 10:11:12

Webpack 2React加載
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美福利精品 | 亚洲一区二区三区四区五区午夜 | 九九久久国产 | 国产精品久久片 | 日韩av在线免费 | 亚洲精品二区 | 久在线| 久久久久久久一区二区 | 日韩一区二区福利视频 | 97影院在线午夜 | 色综合区| 成人av电影在线 | 成人精品一区二区三区中文字幕 | 狠狠综合久久av一区二区老牛 | 成人国内精品久久久久一区 | 亚洲二区在线 | 毛片免费观看视频 | 国产精品久久久久久久久久软件 | www.日韩| 色av一区 | 久久久国产视频 | 久久久久久亚洲精品 | av男人的天堂av | 成年人黄色一级毛片 | 日韩成人在线观看 | 成人深夜福利在线观看 | 日本精品一区二区三区在线观看视频 | 国产69精品久久久久777 | 2018天天干天天操 | 中文字幕av在线 | 欧美在线观看一区 | 成人精品一区二区三区中文字幕 | 国产精品亚洲综合 | 欧美综合一区二区 | 四虎影院免费在线播放 | 一级做a毛片 | 亚洲精品久久久蜜桃网站 | 美女国内精品自产拍在线播放 | 超碰人人做 | 精品婷婷 | 日本精品一区二区三区在线观看视频 |