最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

超級詳細(xì)的webpack?Plugin講解

 更新時間:2022年04月11日 10:15:29   作者:曼聯(lián)的小黑熊  
plugin是插件的意思,通常是用于對某個現(xiàn)有的架構(gòu)進(jìn)行擴(kuò)展,下面這篇文章主要給大家介紹了關(guān)于webpack?Plugin的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、pulgin 的作用

  • pulgin 就是“插件”的意思,主要目的就是解決 loader 無法實現(xiàn)的事情,loader 只是用作于將特定的模塊進(jìn)行轉(zhuǎn)換,而 pulgin 可以用于執(zhí)行更加廣泛的任務(wù),比如打包優(yōu)化、資源管理、環(huán)境變量注入等

  • pulgin 是貫穿 webpack 整個編譯周期的,運行在 webpack 的不同階段(鉤子 / 生命周期)

二、pulgin 配置方式

通常情況下,pulgin 的配置都是通過 webpack.config.js 配置文件導(dǎo)出對象中 plugins 屬性傳入 new 實例對象

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通過 npm 安裝
const webpack = require('webpack'); // 訪問內(nèi)置的插件
module.exports = {
  ...
  // 配置 plugins
  plugins: [
    new webpack.ProgressPlugin(),
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

三、pulgin 的本質(zhì)

pulgin 本質(zhì)上是一個具有 apply 方法 javascript 對象,而他的這個 apply 方法會被 webpack compiler 階段調(diào)用,并且在整個編譯生命周期都可以訪問 compiler 對象

const pluginName = 'ConsoleLogOnBuildWebpackPlugin';

class ConsoleLogOnBuildWebpackPlugin {
  apply(compiler) {
    compiler.hooks.run.tap(pluginName, (compilation) => {
      console.log('webpack 構(gòu)建過程開始!');
    });
  }
}

module.exports = ConsoleLogOnBuildWebpackPlugin;

關(guān)于整個編譯生命周期鉤子:

  • entry-option :初始化 option
  • run
  • compile: 真正開始的編譯,在創(chuàng)建 compilation 對象之前
  • compilation :生成好了 compilation 對象
  • make 從 entry 開始遞歸分析依賴,準(zhǔn)備對每個模塊進(jìn)行 build
  • after-compile: 編譯 build 過程結(jié)束
  • emit :在將內(nèi)存中 assets 內(nèi)容寫到磁盤文件夾之前
  • after-emit :在將內(nèi)存中 assets 內(nèi)容寫到磁盤文件夾之后
  • done: 完成所有的編譯過程
  • failed: 編譯失敗的時候

四、常見的 pulgin

4-1 html-webpack-plugin

作用:

  • 利用 HtmlWebpackPlugin 插件自動生成 html 文件,并且對打包后的 js 文件做了一個引入
  • HtmlWebpackPlugin 原理是通過自帶默認(rèn)的 ejs 模版去生成的,當(dāng)然也可以自定義模版,在 html 模板中,可以通過 <%=htmlWebpackPlugin.options.XXX%> 的方式獲取配置的值
// webpack.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
 ...
  plugins: [
     new HtmlWebpackPlugin({
            title: "webpack案例",
            template: "./public/index.html", // 指定生成的 html 模版
        }),
  ]
};

4-2 clean-webpack-plugin

作用:每次打包時候,CleanWebpackPlugin 插件就會自動把上一次打的包刪除

const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
 ...
  plugins: [
    new CleanWebpackPlugin()
  ]
}

4-3 mini-css-extract-plugin

作用:提取 CSS 到一個單獨的文件中

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
 ...,
  module: {
   rules: [
    {
     test: /.s[ac]ss$/,
     use: [
      {
       loader: MiniCssExtractPlugin.loader
     },
          'css-loader',
          'sass-loader'
        ]
   }
   ]
 },
  plugins: [
    ...,
    new MiniCssExtractPlugin({
     filename: '[name].css'
    }),
    ...
  ]
}

4-4 DefinePlugin

作用:DefinePlugin 允許在編譯時創(chuàng)建配置的全局常量,是一個 webpack 內(nèi)置的插件(不需要單獨安裝)

const { DefinePlugun } = require('webpack')

module.exports = {
 ...
    plugins:[
        new DefinePlugin({
            BASE_URL: '"./"' // 等價于 const BASE_URL = "./" 他的賦值方式有點奇葩
        }),
    ]
}

這時候編譯template模塊的時候,就能通過下述形式獲取全局對象

  <!-- BASE_URL 是一個全局的常量,是通過 DefinePlugin 這個插件去定義的 -->
  <link rel="icon" href="<%= BASE_URL %>favicon.ico" rel="external nofollow" >

4-5 copy-webpack-plugin

作用:CopyWebpackPlugin 是一個復(fù)制文件的插件,復(fù)制文件或者目錄到指定區(qū)域,比如 vue 的打包過程中,如果我們將一些文件放到 public 的目錄下,那么這個目錄會被復(fù)制到 dist 文件夾中

new CopyWebpackPlugin({
            // 通過 CopyWebpackPlugin 插件將 public 中的文件復(fù)制到打包后的文件夾下
            // patterns 是匹配的意思
            patterns: [
                {
                    from: "public", // 設(shè)置從哪一個源中開始復(fù)制
                    to: "build" // 可以省略,默認(rèn)是復(fù)制到打包輸出的路徑,會根據(jù) output 
                    globOptions: {
                        ignore: ['**/DS_Store', '**/index.html', '**/abc.txt'] // ** 表示的是 from 的文件夾
                    }
                    // globOptions:設(shè)置一些額外的選項,其中可以編寫需要忽略的文件,
                    //比如.DS_Store:mac目錄下回自動生成的一個文件;.index.html:也不需要復(fù)制,因為我們已經(jīng)通過HtmlWebpackPlugin完成了index.html的生成
                }
            ]
        })

總結(jié)

到此這篇關(guān)于webpack Plugin講解的文章就介紹到這了,更多相關(guān)webpack Plugin講解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

陇南市| 汉阴县| 买车| 大田县| 托克托县| 富阳市| 堆龙德庆县| 阿城市| 巍山| 漾濞| 鹤峰县| 军事| 加查县| 民权县| 搜索| 扶沟县| 阳城县| 治县。| 共和县| 商河县| 安平县| 全椒县| 化州市| 旬邑县| 任丘市| 蒙城县| 鹤壁市| 布拖县| 五家渠市| 平顶山市| 凤冈县| 中卫市| 台东县| 浮山县| 海安县| 三门县| 永定县| 泉州市| 朝阳县| 石台县| 巴彦县|