[webpack教程] (一) 初探——从零开始

139 阅读3分钟

前言与背景

自软件研发从业以来一直奔跑在后端,从C/C++到Java最后到各种自主运维和全局研发控场,没有清晰原理之前心理总觉着少点什么。另因为新冠疫情的影响,也为我提供了更多的学习时间。编写这篇博客确实也是相当的“曲折”,一直想能有时间做一些总结,让跟我一样,也对webpack的神奇有疑惑的小伙伴能够释疑。初衷很简单,自己在使用vue.js开发前端项目,包括辅助团队小伙伴开发项目和攻克难题的经验之谈,但不写成文章只能将理解烂在心里。然而我却是那种要“知其然更需知其所以然”而且喜欢刨根问底的人,因此,希望这个系列能陆续完善。若有错误之处也是希望大家不吝赐教,在评论区说出自己的想法,看到后会及时回复。

前置准备

版本
vscode1.42.1
node12.4.0
cnpm6.1.1
webpack4.41.6
webpack-cli3.3.11
webpack-dev-server3.10.3
url-loader3.0.0
html-webpack-plugin3.2.0
css-loader3.4.2
style-loader1.1.3
less-loader5.0.0
sass-loader8.0.2
node-sass4.13.1
babel-core6.26.3
babel-preset-es20156.24.1
babel-loader8.0.6
@babel/core7.8.6
@babel/plugin-transform-runtime7.8.3
@babel/runtime7.8.4
@babal/plugin-proposal-class-properties7.8.3
@babel/preset-env7.8.6
vue2.6.11
vue-loader15.9.0
vue-template-compiler2.6.11

一、安装vscode

二、安装node

三、安装cnpm

全局安装cnpm,建议开启root权限

npm i cnpm -g

四、安装webpack4

cnpm i webpack -g

1.建立demo项目结构

  • webpack_base01
    • src
      • index.html
      • index.js

建议使用vscode创建,方便后续管理

2.查看webpack版本

版本稍有不同,请查看官网,并自行对比。另外,webpack4开始,需要配套安装webpack-cli组件,因此,选择no,重新全局安装webpack-cli。

3.打包准备

3.1 项目初始化

通过终端(请使用vscode的终端,比较直观)进入webpack_base01根目录,执行以下命令:

cnpm init

生成package.json文件,如下图所示:

3.2 添加html文件——index.html

新增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>
    <h1 id="show"></h1>
    <script src="./index.js"></script>
</body>
</html>

新增index.js文件,添加如下内容:

document.getElementById("show").innerHTML = "<h1>Show me</h1>";

此处还尚未用到ES6的语法import因此不存在浏览器无法解析的问题,直接用webpack在终端打包,webpack4会自动寻找src目录下的index.js文件,并将打包后的文件,自动新建dist文件夹,并默认该目录下的main.js文件就是打包生成的文件。 注意点:

src下的index.js文件一定要存在,否则报错。 运行时如果出现webpack的相关警告是因为没有指定模式,因此无需担心。指定开发模式命令为:webpack --mode development。

3.3 新增开发模式配置

在package.json文件中的scripts对象下,新增一条配置,最终如下:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack --mode development"
  }

3.3.1 npm run dev开发模式运行

在终端执行

npm run dev

相当于执行上一小节配置文件中的命令:

webpack --mode development

将index.html引入的js文件修改为刚才生成的main.js,这样打开index.html可以看到代码已经生效。 至此,webpack的作用为:转换高级语法为浏览器可识别的语法,兼容浏览器

3.4 webpack的配置文件

在根目录建立 webpack.config.js文件,文件名固定,否则webpack打包时无法找到。 输入配置,如下所示:

const path = require('path')
module.exports = {
	// 入口
    entry: path.join(__dirname, './src/main.js'),
    // 打包后的出口文件
    output: {
        path: path.join(__dirname, './dist'), 
        // 打包后的出口文件名
        filename: 'bundle.js'
    }
}

参数说明: entry: 打包的入口文件 output: 打包后的出口文件

运行打包命令:

npm run dev

最后生成dist文件,最终将原main.js文件打包生成为bundle.js文件。同时将index.html文件引入的js文件改为bundle.js,打开页面,正常显示。

至此,webpack4的打包已经正常运行,下一节将描述webpack-dev-server动态自动打包功能。

代码下载地址

github.com/Cavan2477/w…