<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • webpack入門教程(webpack入門知識詳細介紹)


    今天,我們來實現一個基礎版的Webpack

    前言

    本質上,webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關系圖(dependency graph),其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個 bundle。

    這是官網對webpack的解釋。提到模塊,模塊顧名思義是獨立的JS文件。與之相近的詞模塊化,通俗地講就是我們平時組織和管理代碼方法的一種實現。

    戰前準備

    我們先來測試一下webpack的打包。

    1.初始化

    創建項目目錄

    mkdir webpackmini 

    2.安裝webpack依賴

    yarn add webpack -D 

    or

    npm install webpack -D 

    3.安裝webpack-cli依賴 這里,稍微注意一下,我們可以下載這個版本的,最新版的安裝之后好像不可用。

    yarn add webpack-cli@3.3.12 -D 

    or

    npm install webpack@3.3.12 -D 

    創建入口文件

    1.創建項目主目錄

    mkdir src 

    2.創建入口文件

    touch main.js 

    3.編輯入口文件

    我們這里使用最簡單的一行代碼。

    console.log('maomin1'); 

    創建編輯webpack 配置文件

    在項目根目錄下鍵入命令:

    touch webpack.config.js 

    并編輯。

    const path = require('path');  
    module.exports = {
      mode:'development',
      entry:'./src/main.js',
      output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.min.js'
      }
    } 

    運行測試打包

    我們這里使用 npx webpack 命令進行打包。打包成功!

    我們來到打包好的bundle.min.js文件,會看到以下代碼:

    /*  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). 
    * This devtool is neither made for production nor for readable output files. 
    * It uses "eval()" calls to create a separate source file in the browser devtools. 
    * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
    * or disable the default devtool with "devtool: false".
    * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). 
    */ /******/ (() => { // webpackBootstrap
      /******/  var __webpack_modules__ = ({
        /***/ "./src/main.js":
        /*!*********************!*
        !*** ./src/main.js ***!
        *********************/
        /***/ (() => {
          eval("console.log('maomin1');nn//# sourceURL=webpack://webpackmini/./src/main.js?");
          /***/ })
        /******/  });
      /************************************************************************/
      /******/
      /******/  // startup
      /******/  // Load entry module and return exports
      /******/  // This entry module can't be inlined because the eval devtool is used. 
      /******/  var __webpack_exports__ = {};
      /******/  __webpack_modules__["./src/main.js"]();
      /******/
      /******/ 
    })() ; 

    我們將注釋刪掉后,會精簡不少!

    (() => {
      var __webpack_modules__ = ({
        "./src/main.js":
        (() => {eval("console.log('maomin1');nn//# sourceURL=webpack://webpackmini/./src/main.js?");})
      });
       var __webpack_exports__ = {};
      __webpack_modules__["./src/main.js"]();
    })(); 

    準備實戰

    開始實戰實現一個基礎版的webpack。

    1.首先我們在項目根目錄下創建一個文件夾。

    mkdir maominpack 

    2.然后,在maominpack文件夾下創建一個bin文件夾

    mkdir bin 

    3.最后在bin文件夾下創建一個maominpack.js文件

    編輯如下:

    #!/usr/bin/env node
    const fs = require('fs'); const ejs = require('ejs');
    const config = require('../../webpack.config.js');
    const entry = config.entry;
    const output = `${config.output.path}/${config.output.filename}`;
    const content = fs.readFileSync(entry,'utf8');
    let template = ` 
    (() => {
        var __webpack_modules__ = ({
        "<%-entry%>":
        (() => {
        eval("<%-content%>");
        })               
         }); 
         var __webpack_exports__ = {};
         __webpack_modules__["<%-entry%>"]();
         })()     ;
         `
    let package = ejs.render(template,{
      entry,
      content
    }); 
    fs.writeFileSync(output,package); 

    首先,我們在頭部指定環境為node環境,并且引入fs模塊。然后,我們引入了ejs依賴,如果不是很了解ejs的,可以去官網瀏覽下。這里就簡單的介紹一下。

    • “E” 代表什么?可以表示 “可嵌入(Embedded)”,也可以是“高效(Effective)”、“優雅(Elegant)”或者是“簡單(Easy)”。EJS 是一套簡單的模板語言,幫你利用普通的 JavaScript 代碼生成 HTML 頁面。EJS 沒有如何組織內容的教條;也沒有再造一套迭代和控制流語法;有的只是普通的 JavaScript 代碼而已。

    我們看到在將帶有綁定值的字符串賦值給template變量,我們這里使用的ejs.render(),第一個參數是需要處理的字符串,第二個參數使我們需要修改的值,是一個對象。

    4.在package.json文件下編輯如下:

    {   
      "name": "maominpack", 
      "version": "1.0.0",
        "bin":{     "maominpack":"bin/maominpack.js"   }, 
          "main": "index.js",   "license": "MIT" 
    } 

    5.為其命令創建快捷方式

    npm link  

    6.為其配置在其他目錄也可使用此命令

    npm config ls 

    7.驗證打包

    我們將src/main.js修改一下。

    console.log('maomin2'); 

    然后,鍵入命令:

    maominpack 

    最后,檢查一下bundle.min.js:

    (() => {
      var __webpack_modules__ = ({ 
        "./src/main.js":
        (() => {
          eval("console.log('maomin2');");
        })
      }); 
      var __webpack_exports__ = {}; 
      __webpack_modules__["./src/main.js"]();
    })() 
    ; 

    發現,我們打包成功了。這里我們只是實現了最基礎的字符串替換打包功能,webpack還有很多值得玩的特性。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费