Webpack

webpack


webpack的安装

npm install webpack@5.42.1 webpack-cli@4.7.2 -D

webpack的配置

在项目根目录中,创建名为webpack.config.js的webpack配置文件,并初始化

module.exports = {
  mode: 'development' //mode用来执行构建模式,可选值有development 和 production
}						//开发用development速度快 上线用production体积更小

在package.json的script节点下,新增dev脚本

 "scripts": {
    "dev": "webpack" //script 节点下的脚本,可以通过npm run执行
  }

在终端执行npm run dev命令,启动webpack进行项目的打包构建

注:

在webpack 4.x和 5.x的版本中

默认的打包入口文件为scr -> index.js
默认的输出文件路径为dist -> main.js

修改默认配置

const path = require('path')

module.exports = {
  entry: path.join(__dirname, './src/index.js'), //打包入口文件的路径 (指定处理哪个文件)
  output: {										//__dirname为当前配置文件所在目录
    path: path.join(__dirname, './dist'), 		//输出文件的存放路径
    filename: 'bundle.js' 						//输出文件的名称
  }
}




webpack插件


第三方插件对webpack功能进行拓展

webpack-dev-server

npm install webpack-dev-server@3.11.2 -D

webpack-dev-server会启动一个实时打包的http服务器

类似于nodemon 每次修改源代码,webpack会自动进行项目的打包和构建,生成的bundle.js不在磁盘空间中,在内存中

在package.json的脚本中修改dev命令

 "scripts": {
    "dev": "webpack serve" //script 节点下的脚本,可以通过npm run执行
  }



html-webpack-plugin

webpack中的html插件,可以定制index.html页面的内容

npm install html-webpack-plugin@5.3.2 -D

通过html插件复制到项目根目录下的index.html页面,也放在了内存中,html插件在生成的index.html页面,会自动注入打包的bundle.js文件


devServer节点

在webpack.config.js配置文件中,可以通过devServer节点对webpack-dev-server插件进行更多配置

devServer: {
  open: true,         //初次打包完成后,自动打开浏览器
  host: '127.0.0.1',  //实时打包所使用的主机地址
  port: 80,            //实机打包所使用的端口号
}




loader


webpack默认只能打包处理.js结尾的文件,处理不了其他后缀文件

当webpack发现某个文件处理不了时,会查找webpack.config.js这个配置文件,看module.rules数组中,是否配置了对应的loader加载器

webpack会把index.css这个文件先转交给最后一个loader进行处理(css-loader)

当css-loader处理完毕后,会把处理的结果,转交给下一个loader(style-loader)

当style-loader处理完毕后,发现没有下一个loader就把处理的结果转交给webpack

webpack吧style-loader处理的结果,合并到/dist/bundle.js中,最终生成打包好的文件



打包处理css文件

npm i style-loader@5.2.6 -D

在webpack.config.js的module ->rules数组中 添加loader规则

module: {
  rules: [
    { test: /\.css$/, use: ['style-loader', 'css-loader']},
  ]
}

test表示匹配的文件类型,use表示对应要调用的loader

use数组中的指定的loader顺序是固定的

多个loader的调用顺序是:从后往前调用


打包处理less文件

npm i less-loader@10.0.1 less@4.1.1 -D 

在webpack.config.js中的module ->rules数组中,添加loader

module: {
  rules: [
    { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader']},
  ]
}



打包处理样式表中的与url路径相关的文件

npm i url-loader@4.1.1 file-loader@6.2.0 -D 

在webpack.config.js中的module ->rules数组中,添加loader

module: {
  rules: [
    { test: /\.jpg|png|gif$/, use: 'url-loader?limit=22229'},
  ]
}

?之后的是loader的参数项

limit用来指定图片的大小,单位是字节(byte)

只有<=limit 大小的图片,才会转为base64格式的图片


打包处理js文件中的高级语法

npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D

在webpack.config.js中的module ->rules数组中,添加loader

module: {
  rules: [ //注意:必须使用exclude指定排除项,因为node_modules 目录下的第三方包不需要被打包
    { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },
  ]
}

配置babel-loader

在项目根目录下,创建名为babel.config.js的配置文件,定义babel的配置项

module.exports = {
//声明babel可用的插件
plugins: [['@babel/plugin-proposal-decorators', { legacy: true}]]
}



打包发布


在package.json文件的script节点下,新增build命令

 "scripts": {
    "dev": "webpack serve" //script 节点下的脚本,可以通过npm run执行
    "build": "webpack --mode production"  //项目发布时,运行build命令
  }

–mode是一个参数项,用来指定webpack的运行模式。production代表生产环境,会对打包生成的文件进行代码压缩和性能优化

通过–mode执行的参数项会覆盖webpack.config.js中的mode选项

把javascript文件统一生成到js目录下

修改下配置中的生成文件路径即可

 output: {										//__dirname为当前配置文件所在目录
    path: path.join(__dirname, './dist'), 		//输出文件的存放路径
    filename: 'js/bundle.js' 						//输出文件的名称
  }

把图片文件统一生成到image目录下

修改webpack.config.js中的url-loader配置项,新增outputPath选项修改输出路径

module: {
  rules: [
    { test: /\.jpg|png|gif$/, 
      use: {
        loader:'url-loader',
        options: {
          limit:22229,
          outputPath: 'image'
        }
    }},
  ]
}

//或

module: {
  rules: [
    { test: /\.jpg|png|gif$/, use: 'url-loader?limit=22229&outputPath=image'},
  ]
}

clean-webpack-plugin

自动清理dist目录下的旧文件

安装清理dist目录的webpack插件

npm install clean-webpack-plugin@3.0.0 -D

导入创建实例对象并挂载到plugin节点中

const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const cleanPlugin = new CleanWebpackPlugin()

plugin: [htmlPlugin, cleanPlugin]



Source Map

Source Map是一个信息文件,存储着位置信息Source Map文件中存储着压缩混淆后的代码所对应的转换前的位置

配置后除错工具会直接显示源码,不是转换后的代码

在webpack.config.js中添加如下配置,即可保证运行时报错的行数与源代码的行数保持一致

module.exports = {
	devtool: 'eval-source-map' //可以追溯到源代码
}
devtool: 'nosources-source-map'//不可以追溯到源代码

在开发环境下建议吧devtool的值设置为eval-source-map 可以定位到具体的错误行

生产环境下建议关闭Source Map或将devtool的值设置为nosources-source-map可以防止源码泄露



@

在webpack中不能使用@文件路径,需要手动配置

在webpack.config.js中添加如下配置

reslove: {
	alias: {
		//告诉webpack@符号代表src这一层目录
		'@': path.join(__dirname, './src/')
	}
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值