返回

Webpack 4入门实战:24 个实例手把手教您掌握

前端

Webpack 4 入门实战:24 个实例手把手教您掌握

Webpack 是一个现代前端构建工具,可以将多种类型的资源(如 JavaScript、CSS、图像等)打包成一个或多个优化后的文件,以便在浏览器中高效加载和执行。Webpack 4 是 Webpack 的最新版本,带来了许多新的特性和改进,使其成为构建现代前端应用程序的理想工具。

本文将通过 24 个实例,手把手教您掌握 Webpack 4 的核心概念和使用方法,从入门到实战,循序渐进,让您轻松掌握 Webpack 4 的精髓。

实例 1:基本配置

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
};

这个简单的 webpack 配置告诉 webpack 从 ./src/index.js 开始打包,并将打包后的文件输出到 ./dist/main.js。

实例 2:使用 loader

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

这个配置添加了一个 loader,用于将 CSS 文件转换成 JavaScript 模块,以便 webpack 可以将它们打包到最终的 JavaScript 文件中。

实例 3:使用插件

const webpack = require('webpack');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery',
    }),
  ],
};

这个配置添加了一个插件,用于将 jQuery 库作为全局变量注入到最终的 JavaScript 文件中。

实例 4:代码分割

module.exports = {
  entry: {
    main: './src/main.js',
    vendor: ['jquery'],
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
  },
};

这个配置使用代码分割将应用程序分为两个部分:main.js 和 vendor.js。main.js 包含应用程序的主代码,而 vendor.js 包含第三方库,如 jQuery。这有助于减少初始加载时间,并提高应用程序的性能。

实例 5:使用 HMR

const webpack = require('webpack');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
  ],
  devServer: {
    hot: true,
  },
};

这个配置添加了 Hot Module Replacement (HMR) 插件,它允许在保存更改时自动重新加载应用程序,而无需刷新页面。这对于开发和调试应用程序非常有用。

实例 6:性能优化

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          output: {
            comments: false,
          },
        },
      }),
    ],
  },
};

这个配置添加了 TerserPlugin,它是一个 JavaScript 代码压缩工具。这有助于减小最终 JavaScript 文件的大小,并提高应用程序的性能。

实例 7:Tree Shaking

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  optimization: {
    usedExports: true,
  },
};

这个配置启用了 Tree Shaking,它是一种优化技术,可以从最终 JavaScript 文件中删除未使用的代码。这有助于减小最终 JavaScript 文件的大小,并提高应用程序的性能。

实例 8:自定义 loader

const loader = require('./my-loader');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  module: {
    rules: [
      {
        test: /\.my-file$/,
        use: loader,
      },
    ],
  },
};

这个配置添加了一个自定义 loader,用于处理具有 .my-file 扩展名的文件。自定义 loader 可以用于各种目的,例如编译、转换或压缩文件。

实例 9:自定义插件

const plugin = require('./my-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  plugins: [
    plugin,
  ],
};

这个配置添加了一个自定义插件,用于执行特定任务。自定义插件可以用于各种目的,例如优化构建过程、生成报告或集成其他工具。

实例 10:配置多个入口点

module.exports = {
  entry: {
    main: './src/main.js',
    vendor: ['jquery'],
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
  },
};

这个配置使用多个入口点来构建应用程序。main 入口点包含应用程序的主代码,而 vendor 入口点包含第三方库,如 jQuery。这有助于组织代码并减少最终 JavaScript 文件的大小。

实例 11:配置多个输出

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
    library: 'MyLibrary',
    libraryTarget: 'umd',
  },
};

这个配置使用多个输出选项来构建应用程序。main.js 输出包含应用程序的主代码,MyLibrary 输出是一个通用模块定义 (UMD) 库,可以在多种环境中使用。

实例 12:使用别名

module.exports = {
  resolve: {
    alias: {
      '
module.exports = {
  resolve: {
    alias: {
      '$': 'jquery',
      'my-module': './src/my-module.js',
    },
  },
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
};
#x27;
: 'jquery', 'my-module': './src/my-module.js', }, }, entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'main.js', }, };

这个配置使用别名来缩短模块的名称。例如,$ 别名可以用来引用 jQuery 库,my-module 别名可以用来引用 ./src/my-module.js 文件。这有助于提高代码的可读性和可维护性。

实例 13:使用 externals

module.exports = {
  externals: {
    jquery: 'jQuery',
  },
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
    library: 'MyLibrary',
    libraryTarget: 'umd',
  },
};

这个配置使用 externals 选项来告诉 webpack 不要将某些模块打包到最终 JavaScript 文件中。例如,jquery 外部模块告诉 webpack 不要将 jQuery 库打包到最终 JavaScript 文件中,而是假设它已经存在于全局作用域中。这有助于减小最终 JavaScript 文件的大小,并提高应用程序的性能。

实例 14:使用 watch 模式

module