Webpack初识

编程教程 > WEB (301) 2024-11-26 14:39:04

什么是webpack

Webpack是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。

使用步骤

1. 初始化项目

yarn init -y
Webpack初识_图示-464cda1b983340b69e684736102e4652.png

初始化完毕后可以看到多一个json文件。

2. 安装依赖

yarn add webpack webpack-cli -D

3. 在项目中创建 src目录,编写代码

创建src目录/index.js 文件参考:

Webpack初识_图示-ab6a2151a369433cb1773c330b22ed8e.png

创建并编写默认的webpack.config.js文件

webpack.config.js

module.exports = {
mode:'production',
}

 

4. 打包

yarn webpack
Webpack初识_图示-279361d5f65a4a3a84586de6d7eba99a.png
webpack打包

可以看到打包后的文件在dist目录

配置文件webpack.config.js

Webpack提供配置项和插件系统,允许我们在webpack.config.js文件中进行各种配置,从而帮助我们定制化构建项目。

mode

设置打包的模式,production为生产模式,development为开发模式

module.exports = {
   mode:'production'
}

entry

指定打包入口文件,默认为./src/index.js

module.exports = {
   entry:'./src/a.js',
}
Webpack初识_图示-eb1c6418f7264087b0d2a8e7bbed6b12.png
指定打包入口文件

指定打包入口为a.js编译后查看如上图所示,达到预期效果。

 

指定打包入口文件为['./src/a.js','./src/b.js'] 数组

entry:['./src/a.js','./src/b.js']
Webpack初识_图示-f5b26e54a0e44b46b243ca49d9de21e3.png
使用数组可以设置多个入口文件,但是最后始终打包成一个文件

 

指定打包入口文件为对象且多个文件

entry:{
    aa:'./src/a.js',
    bb:'./src/b.js',
},
Webpack初识_图示-954ff9a6841046ee89a79097c7b41eed.png
会打包成多个文件

Webpack 会将value文件打包成key.js文件,比如上述例子会将'./src/a.js'文件打包成aa.js文件、'./src/b.js'件打包成bb.js文件。

 

output

对打包后的文件进行配置,默认打包文件地址为./dist/main.js

const path = require('path')
module.exports = {
   output:{
       filename: "bundle.js", //打包后的文件名
       clean: true, //每次打包前清除上次打包的文件
       path: path.resolve(__dirname, 'hello'), //打包后的文件存放路径,必须要绝对路径
   }
}

filename中Webpack提供模版字符串的形式,可以自动生成唯一文件名:

  • filename: "[name].js" 打包多个文件时匹配对应的文件名,[name]与 entry 中的 key 对应。
  • filename: "[hash].js" 会随机生成哈希值,一般用于区分版本。

等等,详情参考官方文档 Output | webpack 中文文档 (docschina.org)

image
filename参考
Webpack初识_图示-f901b97e56f945869e0b23800f6653b6.png
hash参考(注意hash必须加中括号!!!


loader

Webpack默认情况下,只会处理 js 文件,如果我们希望它可以处理其他类型的文件,则要为其引入loader

以css为例,如果我们不进行任何操作

 
Webpack初识_图示-8d58ef1150cb434aadfd1c8411c683ef.png

如上所示,创建一个测试的样式文件然后js引入使用。

//直接将css引入到js中
import './style/index.css';
document.body.insertAdjacentHTML('beforeend', '<h1>hello webpack</h1>');

此时直接打包:

Webpack初识_图示-83538dc273f44bf6a16e86911cfa594c.png
打包报错

报错了,Webpack说读不懂。

所以下面我们需要安装解析css文件的loader:

yarn add css-loader

配置loader,rules是一个数组,允许我们配置多个loader,test属性是一个正则表达式,用于匹配对应loader的文件,use属性则是匹配对应loader。

module:{
   rules:[
       {
           test:/\.css$/, //匹配文件
           use:'css-loader'
       },
   ]
}

配置完毕,成功打包,但是页面上并没有样式,但是打包文件中是有样式的啊,为什么就没有显示到页面上呢?

因为loader遵循职责单一原则,一个loader只做一件事情,如果你想在打包的文件中使用上css,光有解析loader还不够,还需要安装另一个loader:

yarn add style-loader

然后配置style-loader

module.exports = {
   module:{
       rules:[
           {
               test:/\.css$/, //匹配文件
               use:['style-loader','css-loader'] //从后往前执行,有顺序要求
           },
       ]
   }
}

这里需要注意⚠️,如果我们配置多个loader,则用数组存放,存放的顺序遵循从右往左,先执行的放右边,否则会报错。这里先编译css再使用,所以顺序为'style-loader','css-loader'

babel-loader

在编写js代码时,经常需要使用一些js中的新特性,而新特性在旧的浏览器中兼容性并不好。但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们通过一些工具将新代码转换为旧代码。

Babel 就是这样一个工具,可以将新的js语法转换为旧的js,以提高代码的兼容性。我们如果希望在Webpack支持babel,则需要向Webpack中引入babel-loader。

document.body.onclick(()=>{
   alert('hello webpack')
})

打包后发现还是箭头函数。

于是我们安装babel-loader以及一些配置:

yarn add -D babel-loader @babel/core @babel/preset-env

配置

module:{
   rules:[
       {
           test: /\.m?js$/, //以.mjs或js后缀的文件
           exclude: /(node_modules|bower_components)/, //排除node_modules中的文件
           use: {
               loader: 'babel-loader',
               options: {
                   presets: ['@babel/preset-env'] //根据目标浏览器或运行时环境自动选择合适的转换规则
               }
           }
       }
   ]
}

再次测试,成功将箭头函数打包成普通函数。

配置兼容性

我们可以在package.json文件中配置需要兼容的浏览器,详情见 github

"browserslist": [
 "defaults", //默认
 "ie <= 11", //ie版本低于11
 "last 2 versions", //至少存在两个版本
 "> 1%", //市场占有率大于1%
 "iOS 7",
]

plugin

plugin 的作用是 Webpack 扩展功能。loader 可以理解为转换器,用于处理模块之间的转换,plugin 则用于执行更广泛的任务,它可以访问 Webpack 的生命周期,在合适的时机执行插件的功能。

举个例子?:

我想在打包目录生成html文件,用于访问打包的js文件,我们可以手动创建,但是我们不建议直接操作dist打包目录,我们可以通过plugin自动生成该文件。

安装自动生成html文件的插件

yarn add -D html-webpack-plugin
plugins:[
   //自动创建html文件
   new HTMLPlugin({
       title:'Hello Webpack', //配置html文件的标题
       template:'./src/index.html' //以哪个文件为模版创建
   })
]

当我们再次打包,就会自动生成包含对应配置的html文件。

服务器环境

webpack-cli提供了许多命令帮助我们打包运行项目

yarn webpack

每次修改源码都需要重新打包,太麻烦了,所以需要

yarn webpack --watch

加上--watch后每次修改源码都会被监听到,并且重新打包。

但是这个命令不能完美还原项目上线的场景,因为它访问的是文件目录,而不是服务器。

为此,我们可以安装一个Webpack服务:

yarn add -D webpack-dev-server

当我们运行以下命令,它能够将项目部署到一个开发服务器上:

yarn webpack serve --open

当我们访问本地8080端口,就能够看到我们的项目。

⚠️需要注意的是:这个服务它只会将我们的项目打包并运行在这个服务器,但是本地看不到这个dist的,所以当我们项目调试完毕,还需要自己手动打包一下。

快捷命令

我们一般会将常用的命令配置一下,使用起来更方便:

"scripts": {
 "build": "webpack",
 "watch": "webpack --watch",
 "dev": "webpack serve --open"
},
Webpack初识_图示-84872357f217409ba8b0313ee98f8e85.png

执行命令参考:

yarn build //构建脚本
yarn dev //dev脚本

 

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
什么是webpackWebpack是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。
前言Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。随着
环境说明下载的nodejs版本10.80安装nodejs后自带的npm版本为6.2.0npm环境说明 npm配置文件简介npm的配置文件为用户根目录下的:~/.
在初始化完一个vue项目(基于vue-cli 和webpack)之后,我们可以通过 npm run dev来让这个项目跑起来
先安装nodejs然后全局安装pnpm工具npm install -g pnpm
步骤:1、配置文件webpack.config.js:  {     test:/\.css$/,     loader:'style-loader!css-loader'  ...
vue打包会把vue相关的组件打包到一个文件vendor.*.js(*是个随机数)步骤一 资源引入vue最外层index.html文件引入资源文&lt;body&gtl;     &lt;di...
1.打开github nodejs源码地址GitHub - nodesource/distributions: NodeSource Node.js Binary Distributions2....
Import Maps是一种针对web页面去控制imports行为的新方式,潜在地可以使你摈弃掉你的构建系统。当Es modules在Ecmascript 20
nvm工具下载nvm gitub 地址:Releases · coreybutler/nvm-windows下载页面:Release v1.1.12 · cor
tui.editor编辑器部分引入必要文件&lt;link rel="stylesheet" href="your/path/to/tui@editor/toastu
Ubuntu/linux通过nvm工具安装指定版本/多个版本切换nodejs由于某些原因需要安装低版本的nodejs,官方源直接安装基本都是某个大版本下的最新小版本,然不满足需求。
java编程中使用nodejs的apidoc工具生成Java api美观的HTML文档,apidoc可以根据代码注释生成web api文档,支持大部分主流语言
artDialog v7 使用说明及API文档,artDialog ,artDialog具有bootstrap风格的弹窗组件
在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,从下面创建的一个空白项目中可以看到:​关于三个文件的说明如下:index.html---主页
vue