详解用webpack把我们的业务模块分开打包的方法

下面我将详细讲解如何使用webpack将业务模块分开打包的方法。

第一步:安装webpack以及相关的Loader和Plugin

首先需要全局安装webpack,使用以下命令:

npm install webpack -g

接着在项目目录下安装webpack以及相关的Loader和Plugin,使用以下命令:

npm install webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin babel-loader css-loader style-loader file-loader url-loader sass-loader node-sass extract-text-webpack-plugin --save-dev
  • webpack:webpack本身
  • webpack-cli:webpack的命令行工具,用于在命令行中执行webpack命令
  • webpack-dev-server:开发服务器,提供了实时重载等功能
  • html-webpack-plugin:生成HTML文件,并自动引入相关的打包后的文件
  • clean-webpack-plugin:构建前清空输出文件夹
  • babel-loader:转化ES6代码到ES5代码
  • css-loader:加载css文件,并且解析css文件中的依赖关系
  • style-loader:将css文件中的样式注入到html文件中
  • file-loader:处理文件对象,可以处理任意二进制的文件,比如把字体文件或者图片文件转换成 require 引用的模块
  • url-loader:和file-loader类似,不过可以将文件以base64编码,并且设置文件大小的上限
  • sass-loader/node-sass:加载 Sass 文件并编译成 CSS
  • extract-text-webpack-plugin:将 CSS 文件单独抽离成一个文件,而不是嵌入到 JavaScript 文件中

第二步:配置webpack.config.js文件

在项目的根目录下创建一个webpack.config.js文件,对webpack进行配置。以下是一个示例配置文件的内容:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const extractSass = new ExtractTextPlugin({
    filename: '[name].[contenthash].css',
    disable: process.env.NODE_ENV === 'development'
});

module.exports = {
    entry: {
        app: './src/index.js'
    },
    output: {
        filename: '[name].[chunkhash].js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader'
                }
            },
            {
                test: /\.scss$/,
                use: extractSass.extract({
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                sourceMap: true
                            }
                        },
                        {
                            loader: 'sass-loader',
                            options: {
                                sourceMap: true
                            }
                        }
                    ],
                    fallback: 'style-loader'
                })
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name].[hash].[ext]',
                            outputPath: 'images/'
                        }
                    }
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name].[hash].[ext]',
                            outputPath: 'fonts/'
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(['dist']),
        new HtmlWebpackPlugin({
            title: 'Webpack Demo',
            template: './src/index.html'
        }),
        extractSass
    ]
};
  • entry:入口文件,这里使用了一个对象来指定入口文件,其中key是chunk的名称,value是入口文件的路径
  • output:输出文件,包括输出路径和文件名
  • module:模块配置,包括各种loader的配置
  • plugins:插件配置,包括生成HTML文件、清除输出文件夹、抽离CSS文件等

第三步:将业务模块进行分割

webpack提供了SplitChunksPlugin,可以将业务模块进行分割。我们只需要在webpack的配置文件中添加如下代码:

optimization: {
  splitChunks: {
    chunks: 'all'
  }
},

上面的代码会将业务模块和第三方库进行分割,从而提高打包速度,减少文件大小。

示例

以下是两个示例的说明:

示例1:将React和ReactDOM分开打包

在示例1中,我们将React和ReactDOM分开打包。具体的做法是先安装React和ReactDOM:

npm install react react-dom --save

接着在webpack.config.js中修改entry配置:

entry: {
  app: './src/index.js',
  vendor: ['react', 'react-dom']
}

将vendor作为第二个入口文件,然后在optimization中添加如下代码:

optimization: {
  splitChunks: {
    cacheGroups: {
      vendor: {
        test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
        name: 'vendor',
        chunks: 'all'
      }
    }
  }
},

其中test属性表示需要提取的第三方库的名称,name属性表示提取的第三方库的chunk名称。

示例2:将CSS文件分离出来

在示例2中,我们将CSS文件分离出来,避免样式嵌入到JavaScript文件中:

npm install extract-text-webpack-plugin css-loader style-loader --save-dev

然后在webpack.config.js中添加如下代码:

const ExtractTextPlugin = require("extract-text-webpack-plugin");

const extractSass = new ExtractTextPlugin({
  filename: '[name].[contenthash].css',
  disable: process.env.NODE_ENV === 'development'
});

module.exports = {
  entry: {
    app: './src/index.js'
  },
  output: {
    filename: '[name].[chunkhash].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: extractSass.extract({
          use: [
            {
              loader: 'css-loader',
              options: {
                sourceMap: true
              }
            },
            {
              loader: 'sass-loader',
              options: {
                sourceMap: true
              }
            }
          ],
          fallback: 'style-loader'
        })
      }
    ]
  },
  plugins: [
    extractSass
  ]
};

其中我们使用了extract-text-webpack-plugin插件来将CSS文件单独打包,不再与JavaScript文件混合在一起。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解用webpack把我们的业务模块分开打包的方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery解决input超多的表单提交

    当一个表单包含大量输入框或其他控件时,提交数据将成为一个烦锁的问题。这时候,jQuery提供了一种非常简单的解决方法来解决这个问题。 1. 序言 在提交大量的表单数据时,有些情况下基于 HTML 的普通表单方式可能并不可行。或者,即使你使用这种方式,提交也可能会非常缓慢。要解决这个问题,你必须使用 AJAX 的形式来提交表单数据。 2. 不使用 AJAX 的…

    jquery 2023年5月27日
    00
  • 如何在jQuery的文档准备事件中运行代码

    在jQuery中,可以使用文档准备事件来确保代码在文档完全加载后再运行。以下是详细的攻略,包含两个示例,演示如何在jQuery的文档准备事件中运代码: 步骤1:引入jQuery库 在使用之前,需要先在HTML文引jQuery库。可以通过以下方式引入: <script src="https://code.jquery.com/jquery-3.…

    jquery 2023年5月9日
    00
  • jQWidgets jqxGrid everpresentrowheight属性

    以下是关于“jQWidgets jqxGrid everpresentrowheight属性”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 everpresentrowheight用于设置表格的固定行高度。 完整攻略 以下是 jqxGrid 控件 everpresentrowheight 属性的完整略: 定义 everpresentrowhe…

    jquery 2023年5月11日
    00
  • jQuery基于随机数解决中午吃什么去哪吃问题示例

    首先,”jQuery基于随机数解决中午吃什么去哪吃问题示例”是一个很有趣的示例,实现了一个随机选择中午吃什么、去哪吃的功能。下面我将详细讲解如何进行这个示例的开发和实现。 准备工作 首先需要在HTML文件中引入jQuery库文件。可以通过CDN引入,例如: <script src="https://cdn.bootcdn.net/ajax/l…

    jquery 2023年5月28日
    00
  • jQuery UI菜单refresh()方法

    jQuery UI菜单(menu)是jQuery UI核心库的一部分,它提供了一种方便的方式来创建和管理菜单。其中refresh()方法是jQuery UI菜单提供的一个用于刷新菜单的方法。 refresh()方法的用途 refresh()方法用于刷新菜单,重新计算和应用菜单项的布局和样式。当你对菜单的内容或者选项做了修改之后,可以调用refresh()方法…

    jquery 2023年5月12日
    00
  • jQuery中的css()方法有什么用

    在jQuery中,css()方法用于获取或设置元素的CSS属性。使用css()方法,我们可以轻松地修改元素的样式,包括颜色、大小、位置等。本文将详细讲解css()方法的用法,并提供两个示例,演示如何使用css()方法修改元素的样式。 css()方法的基本语法 css()方法基本语法如下: $(selector).css(property, value); 其…

    jquery 2023年5月9日
    00
  • 解决同一页面中两个iframe互相调用jquery,js函数的方法

    解决同一页面中两个iframe互相调用jQuery、JS函数的方法,可以采用以下两种方式: 方式一:使用window.parent获取父页面的作用域 在iframe内部通过window.parent获取到父页面的作用域,然后就可以使用父页面的变量和函数。 // 父页面 function getIframeContent() { var iframe1 = d…

    jquery 2023年5月27日
    00
  • jQuery 版本的文本输入框检查器Input Check

    我来为您详细讲解一下 “jQuery 版本的文本输入框检查器Input Check” 的完整攻略。 1. 简介 “jQuery 版本的文本输入框检查器Input Check” 是一款基于 jQuery 编写的文本输入框检查工具。它可以检查用户在输入框中输入的文本是否符合要求,例如字符长度、是否为空、是否为数字等等。 2. 如何使用 2.1 引入jQuery和…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部