返回

精通 Webpack 4 开发指南:全栈入门 React 与 Vue 项目

前端

Webpack 4 进阶实战指南:全栈入门 React 与 Vue 项目

前言

最近,我在参与小组内“造轮子”的过程中,了解并学习到 Webpack v4 的一些内容。趁记忆还深,我将这些知识汇总成文,分享给大家。

Webpack 4 基础概念

Webpack 4 是一个功能强大、高度可定制的 JavaScript 模块打包工具,用于现代前端开发,它可以将你的代码合并和打包成一个或多个适合生产环境的文件。Webpack 4 的功能包括:

  • 模块加载: Webpack 4 可以加载各种各样的模块,包括 JavaScript、JSON、CSS、图片等。
  • 代码解析: Webpack 4 可以解析各种各样的代码,包括 ES6、TypeScript、React、Vue 等。
  • 代码转换: Webpack 4 可以通过插件对代码进行转换,以便在各种环境中运行,例如,将 ES6 代码转换为 ES5 代码。
  • 代码压缩: Webpack 4 可以通过插件对代码进行压缩,以减小代码大小。
  • 代码分块: Webpack 4 可以将代码分块,以实现按需加载,从而提高页面的加载速度。

Webpack 4 项目搭建

React 项目搭建

  1. 安装 Webpack 4
npm install webpack-cli -g
  1. 创建项目目录
mkdir my-react-app
cd my-react-app
  1. 初始化项目
npm init -y
  1. 安装 React 和 Webpack 相关依赖项
npm install react react-dom webpack webpack-cli --save-dev
  1. 创建 webpack.config.js 文件
const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react'],
          },
        },
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.jsx'],
  },
};
  1. 创建 src/index.js 文件
import React from 'react';
import ReactDOM from 'react-dom';

function App() {
  return <h1>Hello, React!</h1>;
}

ReactDOM.render(<App />, document.getElementById('root'));
  1. 运行项目
npm run dev

Vue 项目搭建

  1. 安装 Webpack 4
npm install webpack-cli -g
  1. 创建项目目录
mkdir my-vue-app
cd my-vue-app
  1. 初始化项目
npm init -y
  1. 安装 Vue 和 Webpack 相关依赖项
npm install vue vue-loader webpack webpack-cli --save-dev
  1. 创建 webpack.config.js 文件
const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
          },
        },
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.vue'],
  },
};
  1. 创建 src/main.js 文件
import Vue from 'vue';

new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!',
  },
});
  1. 创建 index.html 文件
<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <div id="app"></div>
    <script src="./dist/bundle.js"></script>
  </body>
</html>
  1. 运行项目
npm run dev

Webpack 4 生产环境构建

Webpack 4 提供了一系列插件,可以帮助你将项目构建为生产环境,常用的插件包括:

  • UglifyJsPlugin: 用于压缩 JavaScript 代码。
  • OptimizeCSSAssetsPlugin: 用于压缩 CSS 代码。
  • MiniCssExtractPlugin: 用于将 CSS 代码提取到独立的文件中。
  • HtmlWebpackPlugin: 用于生成 HTML 文件。

React 项目生产环境构建

  1. 安装生产环境依赖项
npm install uglifyjs-webpack-plugin optimize-css-assets-webpack-plugin mini-css-extract-plugin html-webpack-plugin --save-dev
  1. 修改 webpack.config.js 文件
const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react'],
          },
        },
      },
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.jsx'],
  },
  plugins: [
    new UglifyJsPlugin(),
    new OptimizeCSSAssetsPlugin(),
    new MiniCssExtractPlugin({
      filename: 'style.css',
    }),
    new HtmlWebpackPlugin({
      template: './public/index.html',
    }),
  ],
};
  1. 运行项目
npm run build

Vue 项目生产环境构建

  1. 安装生产环境依赖项
npm install uglifyjs-webpack-plugin optimize-css-assets-webpack-plugin mini-css-extract-plugin html-webpack-plugin --save-dev
  1. 修改 webpack.config.js 文件
const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
          },
        },
      },
      {