【webpack4系列】webpack初识与构建工具发展(一)

文章目录

为什么需要构建工具?

  • 转换 ES6 语法
  • 转换 JSX
  • CSS 前缀补全/预处理器
  • 压缩混淆
  • 图片压缩

前端构建演变之路

  • ant + YUI Tool
  • grunt
  • gulp、fis3
  • webpack、rollup、parcel

为什么选择 webpack?

  • 社区⽣态丰富
  • 配置灵活和插件化扩展
  • 官⽅方更新迭代速度快

初识webpack,简单的例子入手

安装

先确保你已经安装了 Node

其中检查node是否安装成功,使用node -v;检查npm的版本使用npm -v。

创建一个新的项目来开始我们的 webpack 之旅:

复制代码
mkdir webpack-custom
cd webpack-custom

使用npm init -y来创建一个「package.json」文件用于管理项目版本和依赖,然后我们使用 npm安装webpack4版本:

复制代码
npm i webpack@4 webpack-cli@3 -D

webpack-cli 是使用 webpack 的命令行工具,在 4.x 版本之后不再作为 webpack 的依赖了,我们使用时需要单独安装这个工具。

检查是否安装成功:

mac系统:./node_modules/.bin/webpack -v

window系统:.\node_modules\.bin\webpack -v

安装成功之后,我们可以在项目的「package.json」文件中看到对应的 webpack 版本依赖:

复制代码
"devDependencies": {
    "webpack": "^4.46.0",
    "webpack-cli": "^3.3.12"
 }

构建

安装完成之后,我们可以使用npx webpack命令来运行项目内安装的 webpack。

其中,我们可以使用如下命令执行一些操作:

  • npx webpack --help:查看 webpack-cli 提供了哪些命令可用
  • npx webpack --version:查看我们安装的版本
  • npx webpack:运行构建

我们先添加两个简单的代码文件,「src/index.js」和「src/hello.js」,如代码:

index.js代码:

复制代码
import { hello, log } from './hello.js';
log(hello);

hello.js代码:

复制代码
export const hello = 'hello world';

export function log(message) {
  console.log(message);
}

我们执行npx webpack会在src同级目录生成一个dist/main.js文件,这就是使用webpack构建的结果,当然构建我们也可以使用如下命令执行:.\node_modules\.bin\webpack

,我们也可以npm script运行webpack,也即是把构建命令写到 package.json 的 scripts 中:

复制代码
 "scripts": {
    "build": "webpack"
  },

然后我们就可以使用npm run build命令构建webpack了。

配置文件

接下来我们尝试创建一个webpack的配置文件,在我们项目的根目录下创建一个「webpack.config.js」的文件:

复制代码
'use strict';
var path = require('path');
module.exports = {
    mode: 'development',  // 指定构建模式
    entry: './src/index.js', // 指定构建入口文件
    output: {
        path: path.join(__dirname,'dist'), // 指定构建生成文件所在路径
        filename: 'bundle.js' // 指定构建生成的文件名
    },
}

然后我们执行npm run build,就会生成「dist/bundle.js」文件,这说明配置文件生效了。

本地开发

在日常开发中,我们不可能每次修改一次代码就执行一次构建,我们需要一个方便本地开发的工具,和 webpack 配套的则是 webpack-dev-server。同样的,我们使用 npm 来安装:

复制代码
npm install webpack-dev-server@3 -D 

同样地,我们在「package.json」文件的 scripts 字段中添加一个启动开发服务器的命令,如:

复制代码
"scripts": {
    "build": "webpack",
    "serve": "webpack-dev-server"
}

这个时候我们还需要一个「index.html」文件作为页面的基础,webpack 暂时没有能力来处理 html 文件(需要通过插件来处理),我们先在 dist 目录下创建一个「index.html」文件:

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script type="text/javascript" src="bundle.js"></script>
</body>
</html>

同时,在配置文件中添加指定开发服务器启动路径的配置:

复制代码
 devServer: {
    contentBase: path.resolve(__dirname, 'dist') // 开发服务器启动路径
 }

接着再执行 npm run serve,便可以成功启动webpack-dev-server了,默认使用的端口是 8080,用浏览器打开 http://localhost:8080/,便可以访问到我们刚才创建的 html 文件了,打开控制台就可以看到前边的 js 代码打印出来的 hello world 了。

相关推荐
wyiyiyi22 分钟前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip44 分钟前
vite和webpack打包结构控制
前端·javascript
excel1 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国1 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼1 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy2 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT2 小时前
promise & async await总结
前端
Jerry说前后端2 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化
画个太阳作晴天2 小时前
A12预装app
linux·服务器·前端
7723892 小时前
解决 Microsoft Edge 显示“由你的组织管理”问题
前端·microsoft·edge