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 语法


目录
相关文章
|
8天前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
1月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
68 13
|
2月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
71 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
2月前
|
前端开发 JavaScript C++
【绝技大公开】Webpack VS Rollup:一场前端工程化领域的巅峰对决,谁能笑到最后?——揭秘两大构建神器背后的秘密与奇迹!
【8月更文挑战第12天】随着前端技术的发展,模块化与自动化构建成为标准实践。Webpack与Rollup作为主流构建工具,各具特色。Webpack是一款全能型打包器,能处理多种静态资源,配置灵活,适合复杂项目;Rollup专注于ES6模块打包,利用Tree Shaking技术减少冗余,生成更精简的代码。Rollup构建速度快,配置简洁,而Webpack则拥有更丰富的插件生态系统。选择合适的工具需根据项目需求和个人偏好决定。两者都能有效提升前端工程化水平,助力高质量应用开发。
27 1
|
2月前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
38 0
|
2月前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
37 0
|
2月前
|
前端开发 开发者
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。本文阐述 DefinePlugin 的原理、用法及案例,包括安装配置、具体示例(如动态加载资源、配置接口地址)和注意事项,帮助开发者更好地利用此插件优化项目。
54 0
|
3月前
|
JSON 前端开发 JavaScript
前端工程化:Webpack配置全攻略
【7月更文挑战第14天】
52 6
|
3月前
|
JSON 缓存 前端开发
前端工程化:Webpack配置全攻略
【7月更文挑战第18天】
43 1
|
3月前
|
缓存 前端开发 JavaScript
webpack【实用教程】
webpack【实用教程】
30 0
下一篇
无影云桌面