- 当我们习惯了在 node 中编写代码的方式后,在回到前端编写 html、css、js 这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
- 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
- 构建工具就起到这样一个作用,通过构建工具可以将使用 ESM 规范编写的代码转换为旧的 JS 语法,这样可以使得所有的浏览器都可以支持代码。
- Homepage: https://webpack.js.org/
- Homepage(CN): https://webpack.docschina.org/
- Homepage(CN): https://www.webpackjs.com/
- Github: https://github.com/webpack/webpack
-
使用步骤
- 初始化项目
yarn init -y
- 安装依赖
webpack
、webpack-cli
- 在项目中创建
src
目录,然后编写代码(index.js) - 执行
yarn webpack
来对代码进行打包(打包后观察 dist 目录)
- 初始化项目
-
配置文件(webpack.config.js)
const path = require("path") module.exports = { mode: "production", entry: "./src/index.js", output: {}, module: { rules: [ { test: /\.css$/i, use: ["style-loader", "css-loader"] } ] } }
-
在编写 js 代码时,经常需要使用一些 js 中的新特性,而新特性在旧的浏览器中兼容性并不好。此时就导致我们无法使用一些新的特性。
-
但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们可以通过一些工具将新代码转换为旧代码。
-
babel 就是这样一个工具,可以将新的 js 语法转换为旧的 js,以提高代码的兼容性。
-
我们如果希望在 webpack 支持 babel,则需要向 webpack 中引入 babel 的 loader
-
使用步骤
-
安装
npm install -D babel-loader @babel/core @babel/preset-env
-
配置:
module: { rules: [ { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env"] } } } ] }
-
在 package.json 中设置兼容列表
"browserslist": [ "defaults" ]
-
-
插件(plugin)
-
插件用来为 webpack 来扩展功能
-
html-webpack-plugin
-
这个插件可以在打包代码后,自动在打包目录生成 html 页面
-
使用步骤:
- 安装依赖
- 配置插件
plugins: [ new HTMLPlugin({ // title: "Hello Webpack", template: "./src/index.html" }) ]
-
-
-
开发服务器(webpack-dev-server)
- 安装:
yarn add -D webpack-dev-server
- 启动:
yarn webpack serve --open
- 安装:
-
devtool:"inline-source-map"
配置源码的映射
- Homepage: https://vitejs.dev/
- Homepage(CN): https://cn.vitejs.dev/
- Github: https://github.com/vitejs/vite
-
Vite 也是前端的构建工具
-
相较于 webpack,vite 采用了不同的运行方式:
- 开发时,并不对代码打包,而是直接采用 ESM 的方式来运行项目
- 在项目部署时,在对项目进行打包
-
除了速度外,vite 使用起来也更加方便
-
基本使用:
-
安装开发依赖 vite
-
vite 的源码目录就是项目根目录
-
开发命令:
vite 启动开发服务器
vite build 打包代码
vite preview 预览打包后代码
-
-
使用命令构建
npm create vite@latest yarn create vite pnpm create vite
-
配置文件:
vite.config.js
-
格式:
import { defineConfig } from "vite" import legacy from "@vitejs/plugin-legacy" export default defineConfig({ plugins: [ legacy({ targets: ["defaults"] }) ] })