webpack只能打包js模块,其他模块的打包需要借助loader。loader可以处理各种各样文件类型。
{
test: /\.(png|jpe?g|gif)$/i,
use: {
loader: 'url-loader',
options: {
name: '[name]_[hash].[ext]',
outputPath: 'images',
limit: 10240 // 小文件会打包成base64放到文件中,减少文件请求
}
}
}
{
test: /\.scss$/i,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
// modules:true, // css模块化,两个文件的样式不会耦合,使样式独立
importLoaders: 2 // 在该loader之前用2个loader处理import的资源
}
},
'sass-loader', // 翻译scss文件
'postcss-loader',
]
}
plugins插件是 webpack 的支柱功能,可以解决 loader 无法实现的其他事。
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
CleanWebpackPlugin
} = require('clean-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({ // 自动生成html文件
template: 'src/index.html'
}),
new CleanWebpackPlugin(), // 清空上次打包文件
],
}
SourceMap是映射关系,可以知道打包出的文件报错位置映射到源文件中的哪个文件的具体位置,开发环境与实际代码不一致时可以帮助我们debug到原始代码。
devtool: 'cheap-module-eval-source-map', // 开发环境配置
devtool: 'cheap-module-source-map', // 生产环境配置
WebppackDevServer:用在开发环境,提升开发效率;HRM:开发过程中,无需重新加载整个页面,去更新各种模块。
devServer: {
contentBase: './dist',
open: true,
port: 8080,
hot: true, // 开启HMR的功能
hotOnly:true // HMR不生效时,浏览器不自动刷新
},
const webpack = require('webpack');
plugins: [
new webpack.HotModuleReplacementPlugin()
]
if(module.hot) {
module.hot.accept('./number',() => {
document.body.removeChild(document.getElementById('number'));
number();
})
}
npm install --save-dev babel-loader @babel/core
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
}
npm install @babel/preset-env --save-dev
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
presets: [
['@babel/preset-env', {
targets: {
chrome: '76'
},
useBuiltIns: 'usage' // 当做babel-polyfill填充时,根据业务代码决定加哪些翻译代码
}]
]
}
}
将babel-presets缺失的变量和函数补充到低版本浏览器中。如果放到业务代码最顶部的入口文件中,打包时会将不需要的文件打到文件中,导致打包文件大小变大,所以配置useBuiltIns可以做到按需引入polyfill的内容。
import "@babel/polyfill";
以上方式引入polyfill会污染全局环境。如果是写一些UI组件或者类库,不能用这种引入方法。可以用下面这种方式配置:
npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
'plugins': [
['@babel/plugin-transform-runtime', {
'corejs': 2, // npm install --save @babel/runtime-corejs2
'helpers': true,
'regenerator': true,
'useESModules': false
}]
]
以上是最近学习webpack的一些成果,如果有不对的,欢迎大家指正哦~