这是我参与更文挑战的第2天,活动详情查看:更文挑战
Entry与Output的基础配置
entry 顾名思义就是打包的入口文件, Output就是打包的出口文件。
module.exports = {
entry: {
main: './src/index.js',
list: './src/list.js'
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
}
复制代码
- 上述代码块中的
Entry配置的是多文件入口,其中main是指入口文件是src目录下的index.js; - 上述代码块运行打包是会报错,原因是入口文件有两个但出口文件的
filename是写死的会导致打包后的两个名字冲突,所以当我们的入口文件超过1个就应该按照下面的配置写;
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
}
复制代码
这样打包出来的文件就不会报错了,打包好后也好自动帮我们引入打包好的js,如下:
<html>
<script src="./main.js"></script>
<script src="./list.js"></script>
</html>
复制代码
打开其他网站可以看到所有引入的 JS 前面都会加一个 CDN 这样的一个地址,如果我们想在src="https://juejin.cn/post/main.js"上加cdn地址应该怎么做呢?
output: {
publicPath: 'http://xxx.com',
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
}
复制代码
在出口文件中配置publicPath即可,打包出来的文件就会变成src="http://xxx.com/main.js";
使用loader处理图片
当在html中引用图片在进行webpack打包时会报错,原因是webpack识别不了这张图片,这时就需要用到loader来帮助webpack识别图片;
module.exports = {
module: {
rules:[{
test:/\.jpg$/,
use: {
loader: 'url-loader',
options: {
name: '[name]_[hash].[ext]',
outputPath: 'images/',
limit: 10240
}
}
}]
}
}
复制代码
- 规则在module底下的rules中配置, 当webpack识别到jpg后缀时会执行上述代码使用loader进行转换,使用
url-loader进行转换; options是配置选项[]是占位符的标志,[name]表示识别图片的名字,[hash]表示产生随机字符串,ext表示识别图片的后缀;- 当我们需要把图片资源打包到
images目录下时可以配置outputPath; limit是限制图片大小, 由于使用的是url-loader如果图片小于10240字节就会将图片以base64的形式打包到js当中,如果图片大于10240字节就会生成images文件夹并存在此目录下;
使用loader处理样式
import引进css文件时webpack也是无法识别的,此时我们需要继续在rules中添加规则:
{
test:/\.css$/,
use: [
'style-loader',
'css-loader',
'postcss-loader'
]
}
复制代码
css-loader帮我们干了一件什么样的事情呢?- css loader会帮我们分析出几个css文件之间的关系,最终把这些css文件合并成一段css;
style-loader它的作用是什么呢?- 在得到
css-loader生成的css内容之后,style-loader会把这段内容挂载到页面,打包后页面的head部分会自动引入一个style标签,这个标签就是style-loader帮我们挂载上去的; - 所以在我们处理css文件的时候需要配合
css-loader以及style-loader一起来使用;
- 在得到
postcss-loader是干嘛的呢?- 在这里
postcss-loader是为了给浏览器内核添加私有属性; - 添加此loader后,会去找到
postcss.config.js文件,配置如下: -
// 安装: npm install autoprefixer --save module.exports = { plugins: [ require('autoprefixer') ] } 复制代码 autoprefixer效果是对css文件添加兼容性前缀。
- 在这里
如果是使用scss需要在添加规则:
{
test: /\.scss$/,
use: {
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 2
}
},
'sass-loader',
'postcss-loader'
}
}
复制代码
importLoaders=2的意思是在css-loader之后指定两个数量的loader来处理import进来的资源,两个是指sass-loader以及postcss-loader;
使用HtmlWebpackPlugin生成模板
使用webpack打包时生成dist目录点进去以看里面只有js以及css文件并没有html文件需要我们自己手动引入,这种情况应该怎么处理?
// 安装 npm i html-webpack-plugin clean-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: 'src/index.html'
}),
new CleanWebpackPlugin(['dist']),
]
}
复制代码
HtmlWebpackPlugin它的作用是当打包完成后会生成一个HTML,这个时候生成的HTML是以哪一个HTML为模板生成的呢?就是以src/index.html路径作为模板生成的;
重复打包时我们总是需要手动删除dist目录在进行打包就很麻烦,有没有什么方法可以自动删除?
CleanWebpackPlugin的配置如上,它的作用就是在每次打包前先删除dist目录;
总结
以上就是webpack中比较常用的一些基础配置了,详细配置还请翻阅文档进行学习;























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)