webpack5高级配置

这篇具有很好参考价值的文章主要介绍了webpack5高级配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

webpack多入口

注意:webpack5基本配置只是打包产出一个html文件 ,想要产出多个html就需要进行过入口的配置

  • webpack.common.js

注意:公共文件中的入口需要引入两个js文件

webpack5高级配置,webpack,前端,javascript,开发语言

entry: {
    index:path.join(srcPath, 'index.js'),
    other:path.join(srcPath, 'other.js'),
},
  •  webpack.prod.js

注意:输出的时候利用[name]根据输入的文件名来确定导出的文件名称!

webpack5高级配置,webpack,前端,javascript,开发语言

output: {
    // filename: 'bundle.[contentHash:8].js',  // 打包代码时,加上 hash 戳
    filename: '[name].[contentHash:8].js', // name 即多入口时 entry 的 key
    path: distPath,
    // publicPath: 'http://cdn.abc.com'  // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到
},
  • webpack.common.js

注意:针对多个html文件的时候我们需要生成多个html文件,需要在通过new HtmlWebpackPlugin去实现

webpack5高级配置,webpack,前端,javascript,开发语言

plugins: [
    // 多入口 - 生成 index.html
    new HtmlWebpackPlugin({
        template: path.join(srcPath, 'index.html'),
        filename: 'index.html',
        // chunks 表示该页面要引用哪些 chunk (即上面的 index 和 other),默认全部引用
        chunks: ['index']  // 只引用 index.js
    }),
    // 多入口 - 生成 other.html
    new HtmlWebpackPlugin({
        template: path.join(srcPath, 'other.html'),
        filename: 'other.html',
        chunks: ['other']  // 只引用 other.js
    })
]
  • 测试:

新建两个文件,一个other.html,一个other.js文件

webpack5高级配置,webpack,前端,javascript,开发语言

  •  执行npm run dev

访问http://localhost:8080/other.html

webpack5高级配置,webpack,前端,javascript,开发语言

  访问http://localhost:8080/index.htmlwebpack5高级配置,webpack,前端,javascript,开发语言

  •  执行npm run build

注意:打包文件会分包打包出不同的文件

webpack5高级配置,webpack,前端,javascript,开发语言

  

webpack抽离css文件

注意:因为直接在公共文件配置css,打包时会直接将css文件全部打包到html文件的<style>标签里,这样做会影响性能所以需要做css的文件离

线下环境:

  • webpack.common.js 

注意:去除common文件中对css所有处理,移动到dev文件中

 webpack5高级配置,webpack,前端,javascript,开发语言

 测试:

  • 执行:npm run dev

注意:本地文件的css处理还是在<style>标签中

webpack5高级配置,webpack,前端,javascript,开发语言

 线上环境:

  •  安装插件:
sudo cnpm i mini-css-extract-plugin -D
//extract /ˈekstrækt , ɪkˈstrækt/提取;
  • webpack.prod.js

module.rules中 

webpack5高级配置,webpack,前端,javascript,开发语言

{
    test: /\.css$/,
    use: [
        MiniCssExtractPlugin.loader,  // 注意,这里不再用 style-loader
        'css-loader',
        'postcss-loader'
    ]
},
// 抽离 less --> css
{
    test: /\.less$/,
    use: [
        MiniCssExtractPlugin.loader,  // 注意,这里不再用 style-loader
        'css-loader',
        'less-loader',
        'postcss-loader'
    ]
}

plugins中:

webpack5高级配置,webpack,前端,javascript,开发语言

//抽离css文件
new MiniCssExtractPlugin({
    filename:'css/main.[contentHash:8].css'
})

测试:

  • 执行npm run build

 注意打包出来的css文件不再直接打包到html文件的<style>标签上去。而是直接生成一个css的文件

webpack5高级配置,webpack,前端,javascript,开发语言

压缩css文件:

  • 安装插件: 
sudo cnpm i terser-webpack-plugin -D
sudo cnpm i optimize-css-assets-webpack-plugin -D
  • webpack.prod.js

optimization 里

optimization: {
    // 压缩 css
    minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
}

测试:

执行npm run dev

webpack5高级配置,webpack,前端,javascript,开发语言

注意:压缩css文件打包出来能让打包出来的css文件小3分之1

webpack压缩JS和CSS  

  • 压缩JS

 注意:在optimization.minimizer

optimization /ˌɑːptɪməˈzeɪʃn/优化;
minimizer极小;

new TerserJSPlugin({})
//Terser/ˈtɜrsər/简要的;
  • 压缩CSS 

 注意:在optimization.minimizer里 

new OptimizeCSSAssetsPlugin({})
//Assets/ˈæsets/资产;
  • 整体代码:
optimization: {
    // // 压缩 css
    minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
}

webpack抽离公共代码

注意:打包的时候很多入口或代码中的公共部分抽离出来,不抽离,每个公共部分都会各种打包,这样会浪费性能。 抽离公共代码就是将公共部分抽离出来,代码进行相互引用,可以减少代码执行和加载的次数。

  • webpack.prod.js 的optimization里

webpack5高级配置,webpack,前端,javascript,开发语言

splitChunks: {
//split/splɪt/分离;
//Chunk/tʃʌŋk/组块;

    chunks: 'all',
    /**
     * initial 入口chunk,对于异步导入的文件不处理
        async 异步chunk,只对异步导入的文件处理
        all 全部chunk
        */

    // 缓存分组
    cacheGroups: {
        // 第三方模块
        vendor: {
            name: 'vendor', // chunk 名称
            priority: 1, // 权限更高,优先抽离,重要!!!
            test: /node_modules/,
            minSize: 0,  // 大小限制
            minChunks: 1  // 最少复用过几次
        },

        // 公共的模块
        common: {
            name: 'common', // chunk 名称
            priority: 0, // 优先级
            minSize: 0,  // 公共模块的大小限制
            minChunks: 2  // 公共模块最少复用过几次
        }
    }
}
  • webpack.common.js 

注意:配置不同的引入生成的chunk文件

 webpack5高级配置,webpack,前端,javascript,开发语言

plugins: [
    // 多入口 - 生成 index.html
    new HtmlWebpackPlugin({
        template: path.join(srcPath, 'index.html'),
        filename: 'index.html',
        // chunks 表示该页面要引用哪些 chunk (即上面的 index 和 other),默认全部引用
        chunks: ['index', 'vendor', 'common']  // 只引用 index.js
    }),
    // 多入口 - 生成 other.html
    new HtmlWebpackPlugin({
        template: path.join(srcPath, 'other.html'),
        filename: 'other.html',
        chunks: ['other', 'common']  // 只引用 other.js
    })
]

测试:

  • 安装插件:
sudo cnpm i lodash -D
  •  在src目录index.js文件代码
import loda from 'lodash'
console.log(loda.each);
  • 执行npm run build
  • 打包后会生成两个公共的chunk文件

webpack5高级配置,webpack,前端,javascript,开发语言

  • 不同的html文件<script>有不同的引入

webpack5高级配置,webpack,前端,javascript,开发语言 webpack5高级配置,webpack,前端,javascript,开发语言 

 webpack懒加载

注意:import()直接引入即可,不需要去进行任何的配置

测试:

  • 在src目录下新建一个promise.js文件:

webpack5高级配置,webpack,前端,javascript,开发语言

  • 在index.js直接引入

setTimeout(() => {
    import('./promise').then(res => {
        console.log(res);
    })
}, 1500)
  • 运行npm run dev会在1.5秒后执行promise.js文件

webpack5高级配置,webpack,前端,javascript,开发语言

  • 执行npm run build命令 会自动在dist目录下生成一个新的chunk文件 

webpack5高级配置,webpack,前端,javascript,开发语言

webpack处理JSX

注意:处理JSX利用bable

  • 安装插件:
sudo cnpm i @babel/preset-react
  • 在.babelrc文件中修改代码
{
    "presets": ["@babel/preset-react"],
    "plugins": []
}
  • ok 

webpack处理Vue 

  • 安装插件:
sudo cnpm i vue-loader -D
  •  webpack.common.js

webpack5高级配置,webpack,前端,javascript,开发语言文章来源地址https://www.toymoban.com/news/detail-554387.html

rules: [
    {
        test: /\.js$/,
        use: ['babel-loader'],
        include: srcPath,
        exclude: /node_modules/
    },
    {
        test: /\.vue$/,
        use: ['vue-loader'],
        include: srcPath,
        exclude: /node_modules/
    }
]

到了这里,关于webpack5高级配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于vue3+webpack5+qiankun实现微前端

    一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S)  2 在src下新建micro-app.js文件,用于存放所有子应用。  3 改造vue.config.js,允许跨域访问子应用页面  4 改造main.js   5 在App.vue中写响应跳转子应用(根据自己的项目找对应位置写,不局限于App.vue)   需要注

    2024年02月13日
    浏览(44)
  • Webpack5开发模式选择

    Webpack 5 是一款强大的模块打包工具,可用于将许多分散的模块按照依赖关系打包成一个(或多个)bundle。在Webpack 5中,主要有两种开发模式,分别是开发模式(development)和生产模式(production)。这两种模式主要的区别和各自的作用如下: 开发模式(development):这种模式主

    2024年02月16日
    浏览(27)
  • Webpack5新手入门简单配置

    yarn init -y   yarn add -D webpack@5.75.0 webpack-cli@5.0.0 说明:写入下面的一句话 说明:如果没有安装webpack脚手架就不能执行yarn webpack(webpack-cli) yarn webpack  说明:为yarn webpack起别名  yarn build 说明:注释写在了代码里面了

    2024年02月14日
    浏览(44)
  • Webpack5入门到原理3:基本配置

    在开始使用 Webpack 之前,我们需要对 Webpack 的配置有一定的认识。 entry(入口) 指示 Webpack 从哪个文件开始打包 output(输出) 指示 Webpack 打包完的文件输出到哪里去,如何命名等 loader(加载器) webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析

    2024年01月20日
    浏览(42)
  • webpack5搭建react框架-生产环境配置

    一、前言 在项目构建时不同的环境下会有不同配置,在前面文章中已经使用webpack5配置好了基础环境和开发环境,但是在生产环境时有些配置和开发环境是不需要的,有些是可以在优化的,所以下面继续生产环境的配置。 二、生产环境配置 1、添加生产环境基础配置 首先我们

    2023年04月13日
    浏览(23)
  • Webpack5入门到原理21:提升开发体验

    开发时我们运行的代码是经过 webpack 编译后的,例如下面这个样子: 所有 css 和 js 合并成了一个文件,并且多了其他代码。此时如果代码运行出错那么提示代码错误位置我们是看不懂的。一旦将来开发代码文件很多,那么很难去发现错误出现在哪里。 所以我们需要更加准确

    2024年01月25日
    浏览(27)
  • webpack5基础--12_开发服务器&自动化

    每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化 webpack.config.js 注意运行指令发生了变化 并且当你使用开发服务器时,所有代码都会在内存中编译打包,并不会输出到 dist 目录下。 开发时我们只关心代码能运行,有效果即可,至于代码被编译

    2024年03月10日
    浏览(57)
  • webpack5零基础入门-2wepack配置项的了解

    在使用webpack之前,我们需要对webpack的配置项有一定的认识。 1.entry(入口) 指示webpack从哪个文件开始打包 2.output (输出) 指示webpack打包完的文件输出到哪里,如何命令等 3.loader(加载器) webpack本身只能处理js、JSON等资源,其他资源需要接触loader,webpack才能解析 4.plugins(插件)

    2024年03月10日
    浏览(36)
  • Webpack5入门到原理13:开发服务器&自动化

    每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化 npm i webpack-dev-server -D webpack.config.js 注意运行指令发生了变化 并且当你使用开发服务器时,所有代码都会在内存中编译打包,并不会输出到 dist 目录下。 开发时我们只关心代码能运行,有效果即

    2024年01月20日
    浏览(38)
  • 《基于 Vue 组件库 的 Webpack5 配置》2.模块规则 module.rule

    配置 module.rules ,创建模块时,匹配请求的规则数组; 可参考 webpack5 指南-管理资源; vue 可参考上述配置; js 使用 webpack babel-loader; css 参考 webpack 加载 CSS。注意 style-loader 和 vue-style-loader 选一个即可,两者的功能基本一致,只是 vue-style-loader 可用于服务端渲染 SSR; stylus

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包