webpack插件

本文介绍如何使用DefinePlugin在Webpack中定义全局变量,并通过extract-text-webpack-plugin将CSS从JavaScript中分离出来,形成独立的CSS文件,提升网页加载速度。

1. DefinePlugin 定义全局变量,这个插件是webpack自带的。在 webpack 打包的时候会对这些变量做替换。

new webpack.DefinePlugin({
            "ENV":'"production"',
            'PRODUCTION': JSON.stringify(true),
          })

在js文件中,可以当做全局变量使用,注意全局变量的值是引号里面的内容

console.log(ENV);//"production"
console.log(typeof ENV);//string
if(PRODUCTION){
    console.log(typeof PRODUCTION);// boolean
}

为什么说是替换呢?来看打包后的代码

console.log("production");
console.log("string");
if(true){
    console.log("boolean");
}

2.extract-text-webpack-plugin:提取出 JavaScript 代码里的 CSS 到一个单独的文件

npm i -D extract-text-webpack-plugin

下载npm包时,有一个警告,意思是当前安装extract-text-webpack-plugin的版本是3.0.2,需要依赖webpack@^3.1.0,

npm WARN extract-text-webpack-plugin@3.0.2 requires a peer of webpack@^3.1.0 but none is
 installed. You must install peer dependencies yourself.

但是项目中webpack的版本是4.20.2,这导致运行时报错,需要安装最新的extract-text-webpack-plugin

npm i -D extract-text-webpack-plugin@next

使用方式

1.   const ExtractTextPlugin = require('extract-text-webpack-plugin');

2.         {
                test:/\.css$/,
               use:ExtractTextPlugin.extract({
                // 读取.css 文件需要使用的 Loader
                use: ['css-loader'],
              }),
            }


3. new ExtractTextPlugin({
            filename: `[name].css`,
          })

 

### Webpack 插件钩子机制详解 #### 钩子机制概述 Webpack 的核心特性之一在于其强大的插件系统,这使得开发者能够自定义构建过程。WebPack 使用一种称为“钩子”的机制来允许插件在特定的时间点执行代码。这些时间点可以是在编译开始之前、完成之后或是其他任何有意义的时刻。 #### 基本概念 - **同步钩子(Sync Hooks)**:当触发条件满足时立即按顺序调用所有注册函数。 - **异步钩子(Async Hooks)**:支持并行或串行处理任务,在所有回调完成后继续流程[^3]。 #### 实现方式 为了实现这种灵活性,Webpack 设计了一套基于事件驱动架构的工作流模型。每当发生某些预设的动作(如启动编译),就会发出相应的信号通知已订阅该动作的所有监听器去响应。例如 `html-webpack-plugin` 就利用了这一特点,在每次成功打包后会自动注入最新的资源链接到HTML模板中[^2]。 #### 生命周期挂钩 不同类型的插件可以在 Webpack 编译的不同阶段介入工作。以 `clean-webpack-plugin` 为例,它绑定了 emit 这一关键时刻——即即将写入文件系统的那一刻清除旧版输出目录的内容,从而确保新版本不会受到遗留文件的影响[^4]。 ```javascript const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { plugins: [ new CleanWebpackPlugin() ] }; ``` 对于更复杂的场景,则可能涉及到多个钩子组合使用的情况。此时就需要深入理解各个钩子之间的关系以及它们在整个编译过程中所处的位置。官方文档虽然提供了基础指导,但对于一些高级应用来说,查阅源码可能是获取最准确信息的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值