webpack3--plugins大用处

2023-12-18 20:08
文章标签 plugins 大用处 webpack3

本文主要是介绍webpack3--plugins大用处,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.tuicool.com/articles/eYbE3mf

要想让webpack为我所用,不仅要求我们在loader使用上得心应手,更离不开对plugins的熟练使用。

如果说把webpack比喻成一台豆浆机,我们需要一杯豆浆喝,我们要:

  1. 准备好原材料,好比我们的 entry 入口起点的处理;
  2. 选择豆浆品种,好比我们在选择 loader 加载器;
  3. 搅拌电机工作,好比我们 plugins 插件的大用处;
  4. 完成倒出品尝,好比我们 output 输出文件的处理;
  5. 电力保障在线,好比我们 devServer 服务开启。 
    这一形象的比喻,目的在于帮助我们理解webpack的工作机制,要想用好它,就必须清楚每个module的原理和使用方法。

    下面重点谈谈plugins的大用处:

    插件(plugins)

    loader 仅在每个文件的基础上执行转换,而 插件(plugins) 更常用于(但不限于)在打包模块的 “compilation” 和 “chunk” 生命周期执行操作和自定义功能。webpack 的插件系统极其强大和可定制化。
  • 使用方法:

    想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。

    多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 来创建它的一个实例。

    在webpack.config.js配置如下:

    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const webpack = require('webpack');
    const path = require('path');
    const config = {
    //入口配置
    entry: './path/to/my/entry/file.js',
    //输出配置
    output: {path: path.resolve(__dirname, 'dist'),filename: 'my-first-webpack.bundle.js'
    },
    //模块loader加载转换
    module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }]
    },
    //插件调用完成功能定制
    plugins: [//压缩js插件new webpack.optimize.UglifyJsPlugin(),//以index.html文件为模板生成html5新文件new HtmlWebpackPlugin({template: './src/index.html'})
    ]
    };
    module.exports = config;

    常用webpack插件举例

    webpack 有着丰富的插件接口(rich plugin interface)。webpack 自身的多数功能都使用这个插件接口。这个插件接口使 webpack 变得极其灵活。

    更多插件使用还请移步官网。

  • CommonsChunkPlugin

    The CommonsChunkPlugin is an opt-in feature that creates a separate file (known as a chunk), consisting of common modules shared between multiple entry points. By separating common modules from bundles, the resulting chunked file can be loaded once initially, and stored in cache for later use. This results in pagespeed optimizations as the browser can quickly serve the shared code from cache, rather than being forced to load a larger bundle whenever a new page is visited.

    大致翻译过来就是这个插件可以帮助你从众多模块中抽离并合并出一个公共模块文件,浏览器只加载一次即可,给页面加载带来速度上的提升。

    注意: 此插件属于webpack内置 无需安装

使用方法:

new webpack.optimize.CommonsChunkPlugin(options)

配置:

{name: string, // ornames: string[],// 这是 common chunk 的名称。已经存在的 chunk 可以通过传入一个已存在的 chunk 名称而被选择。// 如果一个字符串数组被传入,这相当于插件针对每个 chunk 名被多次调用filename: string,// common chunk 的文件名模板。可以包含与 `output.filename` 相同的占位符。minChunks: number|Infinity|function(module, count) -> boolean,// 在传入  公共chunk(commons chunk) 之前所需要包含的最少数量的 chunks 。// 数量必须大于等于2,或者少于等于 chunks的数量chunks: string[],// 通过 chunk name 去选择 chunks 的来源。chunk 必须是  公共chunk 的子模块。// 如果被忽略,所有的,所有的 入口chunk (entry chunk) 都会被选择。children: boolean,// 如果设置为 `true`,所有  公共chunk 的子模块都会被选择deepChildren: boolean,// If `true` all descendants of the commons chunk are selectedasync: boolean|string,// 如果设置为 `true`,一个异步的  公共chunk 会作为 `options.name` 的子模块,和 `options.chunks` 的兄弟模块被创建。minSize: number,// 在 公共chunk 被创建立之前,所有 公共模块 (common module) 的最少大小。
}

举例:

// 提取公共文件
new webpack.optimize.CommonsChunkPlugin({name: 'reset',filename: 'vendor/common.js',//(模块必须被3个 入口chunk 共享)minChunks: 3
}),
  • ExtractTextWebpackPlugin

    Extract text from a bundle, or bundles, into a separate file.

    这个插件是用来分离的,出单独的一个文件

安装:

npm install --save-dev extract-text-webpack-plugin

使用方法:

const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {module: {rules: [{test: /\.css$/,use: ExtractTextPlugin.extract({fallback: "style-loader",use: "css-loader"})}]},plugins: [new ExtractTextPlugin("styles.css"),]
}

它会将所有的入口 chunk(entry chunks)中引用的 *.css,移动到独立分离的 CSS 文件。因此,你的样式将不再内嵌到 JS bundle 中,而是会放到一个单独的 CSS 文件(即 styles.css)当中。

  • HotModuleReplacementPlugin 
    模块热替换插件,启用热替换模块(Hot Module Replacement),也被称为 HMR。 
    注意:永远不要在生产环境(production)下启用 HMR 
    用法: 
    启用 HMR 非常简单,在大多数情况下也不需要设置选项。
    new webpack.HotModuleReplacementPlugin({// Options...
    })
  • HtmlWebpackPlugin 
    它简化了HTML文件的创建,以便为您的webpack包提供服务。 这对于在文件名中包含每次会随着变异会发生变化的哈希的webpack bundle尤其有用。

安装

npm install --save-dev html-webpack-plugin

使用方法:

SPA单页面时:

const HtmlWebpackPlugin = require('html-webpack-plugin');var webpackConfig = {entry: 'index.js',output: {path: 'dist',filename: 'index_bundle.js'},plugins: [new HtmlWebpackPlugin()]
};
module.exports = webpackConfig;

这将会产生一个包含以下内容的文件 dist/index.html:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>webpack App</title></head><body><script src="index_bundle.js"></script></body>
</html>

多页面时:

{entry: 'index.js',output: {path: __dirname + '/dist',filename: 'index_bundle.js'},plugins: [new HtmlWebpackPlugin(), // Generates default index.htmlnew HtmlWebpackPlugin({  // Also generate a test.htmlfilename: 'test.html',template: 'src/assets/test.html'})]
}
  • ProvidePlugin 
    自动加载模块,而不必到处 import 或 require 。 
    当我们的应用大量使用jQuery或Zepto时,可以借助此插件实现一次认定,到处使用。 
    注意:webpack内置,不用安装 
    要自动加载 jquery,我们可以将两个变量都指向对应的 node 模块:
    new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery'
    })
    使用:Lodash Map
    new webpack.ProvidePlugin({
    _map: ['lodash', 'map']
    })
  • UglifyjsWebpackPlugin 
    to minify your JavaScript 
    这个插件用来压缩你的js的,uglify翻译过来是丑化,弄的难看,就是要变成在一堆的代码,从而减小代码文件的体积。

安装:

npm i -D uglifyjs-webpack-plugin

使用方法:

const UglifyJSPlugin = require('uglifyjs-webpack-plugin')module.exports = {plugins: [new UglifyJSPlugin()]
}

配置项:

{parse: {// parse options},compress: {// compress options},mangle: {// mangle optionsproperties: {// mangle property options}},output: {// output options},sourceMap: {// source map options},ecma: 5, // specify one of: 5, 6, 7 or 8nameCache: null, // or specify a name cache objecttoplevel: false,ie8: false,warnings: false,
}

更多参数请参考 Uglifyjs官网

这篇关于webpack3--plugins大用处的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/509628

相关文章

JMeter Plugins之内网插件问题解决

JMeter Plugins之内网插件问题解决 背景 在我司内部进行JMeter工具进行性能脚本开发时,为了提高测试效率,我们会用到部分JMeter提供的插件,但是在我司内网的情况下,我们如果直接点击JMeter界面右上角的插件按钮 弹出来的JMeter插件界面会报错,报错截图如下 在我司工作环境中报错主要是两方面引起的: ○ 证书设置问题:没有对JMeter插件网站进行证书设置 ○ 内部

新版Intellij IDEA的Plugins搜索不了插件

最近使用idea搜索插件, 发现无法搜索, 提示 “Marketplace plugins are not loaded. Check the internet connection and refresh.” 如下图: 在网上查找资料, 基本给出的解决方案都是下面的方式: 打开 Setting–》Appearance & Behavior --》Syetem Setting --》Upda

Webpack4 自定义 Plugins

1.Plugin Webpack 通过 Plugin 机制让其更加灵活,以适应各种应用场景。 在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件。除此之外 Plugin 还可以广播自定义事件和监听自定义广播(例如,多个Plugin插件之间的通讯就可以通过定义自定义广播事件)。通过 Webpack 提供的 API 可以在构建的合适时机去改变输出的结果。 1)一

Webpack4 配置 Plugins

1.Webpack4 配置 Plugins Plugin 用于扩展 Webpack 功能,可以通过在构建流程里注入钩子实现,然而各种各样的 Plugin 几乎让 Webpack 可以做任何构建相关的事情。 loader vs plugins 区别 : loader 用于加载某些资源文件,它只专注于转化文件(transform)这个领域,loader运行在webpack打包之前。 plugi

html+css小技巧大用处

1.用css border写下拉小三角: <span class="sanjiao"></span> .sanjiao{width:0;height:0;border-top:4px solid #ccc;border-right:2px solid transparent;border-left:2px solid transparent;} 2.图片设置右下边框,最外边

导入项目时报以下错误Could not calculate build plan: Plugin org.apache.maven.plugins:maven-

导入项目时报以下错误. Could not calculate build plan: Plugin org.apache.maven.plugins:maven-war-plugin:2.1.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for ...     此问题

Loaded plugins: fastestmirror, langpacks

https://blog.csdn.net/weixin_37282478/article/details/82152239

Intellij IDEA Plugins使用

Intellij IDEA安装插件步骤:      ①选择"File"--->"Settings"--->选择"Plugins"--->搜索,安装,安装完成后,重启IDEA      ②安装插件,可以有网情况下选择"在线安装",或者没网情况下选择"本地安装" 1.Free Mybatis plugin(必备)       可以在mapper接口中和mapper的xml文件中来回跳转,就想接

第3章 小功能大用处-发布订阅

Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。 命令:Redis主要提供了发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅等命令。 1.发布消息:publish channel message 下面操作会向channel:sports频道发布一条消息

JMeter Plugins Manager---插件安装

参考文章:https://blog.51cto.com/u_14126/6291032 需求: 安装【jpgc - Standard Set】插件 常用插件: 点击下载–报错如下: Failed to apply changes:Cannotapplychanges:Haveno write accessforJMeterdirectories,notpossibletousePlu