webpack 和 babel 实用教程【前端必备】

简介: webpack 和 babel 实用教程【前端必备】

开发环境的前端代码重在易于阅读和编写,生产环境的前端代码追求更快地运行,所以需要通过前端构建工具将开发环境的前端代码通过混淆压缩打包构建成生产环境的前端代码。

webpack的用途

webpack 是众多前端构建工具的一种,主要实现以下功能:

  • 压缩代码
    将JS、CSS代码混淆压缩,让代码体积更小,加载更快
  • 编译语法
    将 Less、Sass、ES6、TypeScript 等浏览器可能不兼容的语法编译成浏览器支持的语法,如使用Babel编译ES6语法
    CSS和JS的模块化语法,有的浏览器也不兼容,需使用webpack、Rollup等进行处理。

babel 的用途

将 ES6+ 的语法编译为 ES5 的语法,提升代码的兼容性,因为有的浏览器不支持 ES6+ 的语法

安装 webpack 和 babel

安装 node.js

创建文件夹 webpack_demo

创建文件夹 webpack_demo

初始化项目

npm init -y

安装 webpack

为提升安装速度,此处使用了 cnpm (若无法使用,先执行 npm i cnpm 安装 cnpm )

cnpm install webpack webpack-cli -D

安装 babel

用于将 ES6 语法编译成 ES5

cnpm install @babel/core @babel/preset-env babel-loader -D

新建文件 .babelrc

添加 babel 相关的配置

{
    "presets": ["@babel/preset-env"],
}

安装 webpack-dev-server

用于启动服务

cnpm install webpack-dev-server

安装 html-webpack-plugin

用于解析 html

cnpm install html-webpack-plugin -D

新建文件 webpack.config.js

开发环境 webpack 的配置文件(具体含义详见代码注释)

// 导入js包 -- path 用于拼接文件路径
const path = require("path");
// 导入插件 -- html-webpack-plugin 用于打包 html
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  // 构建模式,默认值为 production (会压缩代码并进行各种优化,如 tree shaking),还可设置为 development,方便调试
  mode: "development",
  // 指定入口文件为 src/index
  entry: path.join(__dirname, "src", "index"),
  // 将js文件打包到 dist/bundle.js 中
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist"),
  },
  // 模块
  module: {
    // 规则
    rules: [
      {
        // 正则匹配所有以.js结尾的文件
        test: /\.js$/,
        // 使用 babel-loader 插件
        loader: ["babel-loader"],
        // 搜索 src 文件夹中的文件
        include: path.join(__dirname, "src"),
        // 不搜索 node_modules 中的文件
        exclude: /node_modules/,
      },
    ],
  },
  //  配置插件
  plugins: [
    // 使用插件 html-webpack-plugin 将 src/index.html 打包到 dist/index.html 中
    new HtmlWebpackPlugin({
      template: path.join(__dirname, "src", "index.html"),
      filename: "index.html",
    }),
  ],
  // 开发环境服务配置 —— 以下配置的含义:自动打开浏览器,访问 localhost:3000/index.html 渲染 dist/index.html
  devServer: {
    // 端口
    port: 3000,
    // 路径
    contentBase: path.join(__dirname, "dist"), // 根目录
    // 是否自动打开浏览器
    open: true,
  },
}

 

新建文件 webpack.prod.js

打包构建生产环境代码时的 webpack 配置文件(具体含义详见代码注释)

// 导入js包 -- path 用于拼接文件路径
const path = require("path");
// 导入插件 -- html-webpack-plugin 用于打包 html
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  // 构建模式,默认值为 production (会压缩代码并进行各种优化,如 tree shaking),还可设置为 development,方便调试
  mode: "production",
  // 指定入口文件为 src/index
  entry: path.join(__dirname, "src", "index"),
  // 将js文件打包到 dist/bundle.js 中
  output: {
    // 添加了 [contenthash] ,用于打包时,根据代码内容生成一个 hash 字符串,若代码没发生改变,则这个 hash 字符串不会改变,利于命中浏览器缓存,提升性能
    filename: "bundle.[contenthash].js",
    path: path.join(__dirname, "dist"),
  },
  // 模块
  module: {
    // 规则
    rules: [
      {
        // 正则匹配所有以.js结尾的文件
        test: /\.js$/,
        // 使用 babel-loader 插件
        loader: ["babel-loader"],
        // 搜索 src 文件夹中的文件
        include: path.join(__dirname, "src"),
        // 不搜索 node_modules 中的文件
        exclude: /node_modules/,
      },
    ],
  },
  //  配置插件
  plugins: [
    // 使用插件 html-webpack-plugin 将 src/index.html 打包到 dist/index.html 中
    new HtmlWebpackPlugin({
      template: path.join(__dirname, "src", "index.html"),
      filename: "index.html",
    }),
  ],
};

新建文件 src/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p>任意内容</p>
</body>
</html>

新建文件 src/index.js

// ES6语法范例 —— 箭头函数
const sum = (a, b) => a + b
const result = sum(10, 20)
console.log(result)

在 package.json 的 scripts 中添加

  • dev 默认使用的 webpack.config.js 的配置,用于本地开发启动项目
  • build 明确指出使用 webpack.prod.js 的配置,用于打包构建生产代码
    "build": "webpack --config webpack.prod.js",
    "dev": "webpack-dev-server"

本地运行项目

npm run dev


在浏览器中查看源码,可见 ES6 语法已编译为 ES5 语法

打包项目

npm run build

查 dist 文件中的代码,可见 ES6 语法已编译为 ES5 语法


目录
相关文章
|
15天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
35 6
|
17天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
47 7
|
16天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
30 2
|
1月前
|
前端开发 JavaScript 开发者
构建工具对比:Webpack与Rollup的前端工程化实践
【10月更文挑战第11天】本文对比了前端构建工具Webpack和Rollup,探讨了它们在模块打包、资源配置、构建速度等方面的异同。通过具体示例,展示了两者的基本配置和使用方法,帮助开发者根据项目需求选择合适的工具。
24 3
|
2月前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
1月前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
24 0
|
1月前
|
前端开发 JavaScript
轻松上手:基于single-spa构建qiankun微前端项目完整教程
轻松上手:基于single-spa构建qiankun微前端项目完整教程
40 0
|
2月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
82 13
|
3月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
98 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
3月前
|
前端开发 JavaScript C++
【绝技大公开】Webpack VS Rollup:一场前端工程化领域的巅峰对决,谁能笑到最后?——揭秘两大构建神器背后的秘密与奇迹!
【8月更文挑战第12天】随着前端技术的发展,模块化与自动化构建成为标准实践。Webpack与Rollup作为主流构建工具,各具特色。Webpack是一款全能型打包器,能处理多种静态资源,配置灵活,适合复杂项目;Rollup专注于ES6模块打包,利用Tree Shaking技术减少冗余,生成更精简的代码。Rollup构建速度快,配置简洁,而Webpack则拥有更丰富的插件生态系统。选择合适的工具需根据项目需求和个人偏好决定。两者都能有效提升前端工程化水平,助力高质量应用开发。
41 1