Webpack5 系列(一):基础篇2

简介: Webpack5 系列(一):基础篇2

b) 功能代码引入到主文件

导出后,将所有的功能代码统一在 index.js 中引入:


// index.js
// ES Module
import Header from './components/header.js';
import Sidebar from './components/sidebar.js';
import Content from './components/content.js';
const dom = document.getElementById('root');
// header
new Header(dom);
// side-bar
new Sidebar(dom);
// content
new Content(dom);

而 index.html 中只引入 index.js:

<body>
  <div id="root"></div>
  <script src="./index.js"></script>
</body>

然而,浏览器暂不支持模块语法,会报错。

1688266971179.png于是,Webpack 就应运而生了~

二、初识 Webpack

1. 介绍

a) webpack

Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

www.npmjs.com/package/web…

  • 打包 ES Modules,CommonJS 以及 AMD Modules(甚至是组合)。
  • 可以在运行时对异步加载的单文件或多个块进行打包(减少初始加载时间)。
  • 在编译期间解析依赖项,从而减少运行时大小。
  • 加载器(Loaders) 可以在编译时对文件进行预处理。比如,TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc.
  • 高度模块化的 插件(Plugin) 系统。(Highly modular plugin system)

b) webpack-cli

webpack 官方的 CLI (Command Line Interface) 工具。

webpack CLI provides a flexible set of commands for developers to increase speed when setting up a custom webpack project. As of webpack v4, webpack is not expecting a configuration file, but often developers want to create a more custom webpack configuration based on their use-cases and needs. webpack CLI addresses these needs by providing a set of tools to improve the setup of custom webpack configuration.

2. 安装

mkdir webpack-demo
cd webpack-demo
npm init -y
npm i webpack webpack-cli --save-dev

webpack 和 webpack-cli 是两个不同的包,--save-dev 可以简写为 -D,表示保存并写进开发依赖中。

注意:webpack-cli 必须安装,否则运行不了 webpack!

查看版本:

npx webpack -v

npx 会自动查找当前依赖包中的可执行文件,如果找不到,就会去 PATH 里找。如果依然找不到,就会帮你安装!

3. 文件结构

将文件按照如下位置安放:

webpack/
|- /src
  |- /components
    |- content.js
    |- header.js
    |- sidebar.js
  |- index.js
|- index.html
|- package.json

4. 打包

执行打包命令:

npx webpack-cli

运行结果如下:

1688267039284.png

打包完成后,就会出现一个 dist 目录,里面有一个 main.js 文件,这就是打包完成的 js 文件。

或者通过:npx webpack 也可以。

5. 效果

在打包结束后,需要修改 index.html 中脚本的引用位置:

<body>
  <div id="root"></div>
  <script src="./dist/main.js"></script>
</body>

页面效果如下:

1688267063641.png

网页正常显示。

那么, webpack 做了什么事情?它将原来的文件翻译打包成了浏览器看得懂的 js 文件 ( main.js )。

6. 本源

在某种程度上,我们可以将 webpack 理解为 js 代码翻译器吗?其实不然!

它只是可以识别 js 的模块语法而已,例如,上面的 import、export 语法 ( Header、Sidebar、Content 就是模块。),然而对于其他的 js 语法它是不认识的!

正如它的官方文档所说,Webpack is a module bundler.  webpack 是一个模块打包工具!它可以将多个模块打包到一起。另外,对于 CommonJS(Node.js 用)、CMD、AMD 这些模块规范,webpack 也可以识别并打包。

除了 js 文件以外,webpack 还可以打包其他模块文件,例如, ts 文件,css/sass/less/stylus 文件,图片文件等等。

阅读参考:

三、Webpack 配置文件

在第二部分中,我们通过 npx webpack 的形式进行打包,实际上我们用的是 webpack 默认的配置来打包的。

那么如何自定义打包配置呢?

  1. 在根目录下创建配置文件 ( 默认是:webpack.coonfig.js )
  2. 编写打包配置项

注意,此时的文件结构如下:

webpack/
|- /src
  |- /components
    |- content.js
    |- header.js
    |- sidebar.js
  |- index.js
|- index.html
|- package.json
目录
相关文章
|
负载均衡 安全 应用服务中间件
什么是正向代理和反向代理
正向代理是客户端与服务端之间的中介,用于访问受限资源,如V/P/N和动态IP代理,同时可隐藏客户端IP。反向代理则接收客户端请求并转发给后端服务器集群,隐藏真实服务器信息,常用于堡垒机和负载均衡,如nginx。正向代理焦点在客户端,反向代理关注服务端。
|
3月前
|
数据采集 人工智能 数据可视化
GitHub 15.8k star 狂涨 DeerFlow,AI + 搜索 + 报告输出一次搞定!
DeerFlow 是字节跳动开源的深度研究框架,集成语言模型、搜索爬虫与代码执行工具,支持自动化完成复杂研究任务并生成多模态报告。具备多智能体协作、强搜索能力、Python 数据分析及可视化、报告自动生成等功能,适用于学术研究、内容创作与企业分析,部署灵活,社区活跃。
356 2
|
3月前
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
271 0
|
机器学习/深度学习 自然语言处理 计算机视觉
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaNet替换YOLOV8主干
【YOLOv8改进 - Backbone主干】VanillaNet:极简的神经网络,利用VanillaNet替换YOLOV8主干
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
675 0
|
11月前
|
监控 数据可视化 数据挖掘
工时管理:团队为什么要做工时管理?
工时管理不只是单纯地记录时间,而是要通过精确地采集数据、灵活地安排工作、有效地配置资源、透明地进行监控,还有灵活地做出调整,来帮企业把工作效率提上去,把成本控制住,让员工更满意。
243 4
工时管理:团队为什么要做工时管理?
|
网络协议 程序员 数据安全/隐私保护
LabVIEW在两台计算机之间传输数据
LabVIEW在两台计算机之间传输数据
303 0
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例
203 3
|
Linux 虚拟化 数据中心
在Linux中,如何进行系统资源的隔离?
在Linux中,如何进行系统资源的隔离?
|
UED
如何通过 Webpack 实现代码分割?
如何通过 Webpack 实现代码分割?
381 0