内容简介:当在项目中直接运行webpack时,默认读取webpack.config.js中的配置,等同于运行 webpack webpack.config.jshtml-webpack-plugin: 可以指定模版生成html,并可以进行去除双引号、折叠空白符号之类的操作
npm install webpack webpack-cli webpack-dev-server -D 复制代码
1.基本配置 webpack.config.js
当在项目中直接运行webpack时,默认读取webpack.config.js中的配置,等同于运行 webpack webpack.config.js
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin') //自动生成html module.exports = { mode: 'development', // 可选development|production entry: path.join(__dirname, 'src', 'main.js'), watch: true, output: { path: path.resolve(__dirname, 'dist'), publicPath: '', // js 路径为public + path + filename filename: "main.js", chunkFilename: '[name].js' }, module: { rules: [ { test: /\.css$/, // css-loader 导入css // style-loader 将css插入到style标签中 use: ['style-loader', 'css-loader'] }, { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, { test: /\.html$/, // 导入 html use: ['html-loader'] } ] }, plugins: [ new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html' }) ], devtool: 'source-map', devServer: { contentBase: path.join('/dist/'), inline: true, host: '127.0.0.1', port: 3000, } }; 复制代码
2.html处理
html-webpack-plugin: 可以指定模版生成html,并可以进行去除双引号、折叠空白符号之类的操作
const HtmlWebpackPlugin = require('html-webpack-plugin') plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', filename: 'index.html', minify: { removeAttributeQuotes: true, collapseInlineTagWhitespace: true }, hash: true }) ] 复制代码
3.样式处理
3.1基本设置
module: { rules: [ { test: /\.css$/, use: [{ // 插入到style中 loader: 'style-loader', options: { insertAt: 'bottom' } }, 'css-loader'] }, { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } ] } 复制代码
3.2 将所有的样式抽离到一个css文件
const MiniCssExtractPlugin= require('mini-css-extract-plugin') module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader'] }, { test: /\.less$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader'] } ] } 复制代码
3.3 将样式自动添加前缀
cnpm install postcss-loader autoprefixer // webpack.config.js module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'] }, { test: /\.less$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader'] } ] } // postcss.config.js module.exports = { plugins: [ require('autoprefixer') ] } 复制代码
3.4 production 压缩css
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); module.exports = { optimization: { minimizer: [ new OptimizeCSSAssetsPlugin() ] }, mode: 'production', // production | development } 复制代码
3.5 production 压缩js
cnpm install uglifyjs-webpack-plugin -D const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); //压缩js module.exports = { optimization: { //优化项 minimizer: [ new UglifyWebpackplugin({ test: /\.js(\?.*)?$/i, cache: true, // 是否并行处理 parallel: true, sourceMap: true }) ] } } 复制代码
4. 转换es6语法以及校验
cnpm install babel-loader @babel/core @babel/preset-env -D module.exports = { entry: ["@babel/polyfill", "./src/main.js"], module:[ { test: /\.js$/, include: path.resolve(__dirname, 'src'), exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: [ '@babel/preset-env' ], plugins: [ "@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime" //根据自己的需求自行添加 ] } } }, { test: /\.js$/, use: { loader: 'eslint-loader', options: { enfore: 'pre' } } } ] } 复制代码
5. 全局变量引入的问题(以jquery为例)
- 全局loader expose-loader
- 前置loder
- 普通loader
- 内联loader
- 后置loader postcss-loader
5.1 import $ from 'jquery' 时
module = [ test: require.resove('jquery'), use:'expose-loader?$' ] 复制代码
5.2 将
const webpack = require('webpack') plugins: [ new webpack.ProvidePlugin({ $: 'jquery' }) ], 复制代码
6.处理图片
6.1 处理css,js中的图片引用
module: [ { test: /.(jpg|jpeg|png|gif|svg)$/, use:'file-loader' } ] 复制代码
6.2 处理html中引入的图片
module: [ { test: /.html$/, use:'html-withimg-loader' } ] 复制代码
6.3 将小的图片转成base64,减少http请求
module: [ { loader: 'url-loader', options: { // 小于50k的图片转成base64 limit: 50 * 1024, // 50k name: '[hash:8].[ext]', outputPath: './images' } } ] 复制代码
7.打包文件分类
//img module: [ { loader: 'url-loader', options: { // 小于50k的图片转成base64 limit: 50 * 1024, // 50k name: '[hash:8].[ext]', outputPath: '/images/', //图片打包到images下 //打包后为图片的引入路径前添加url前缀,可以在需要将图片使用cdn的时候用(和其他文件的publicPath不同) //publicPath: 'http://www.xxxcdn.com/' } } ] //css plugins: [ new MiniCss({ filename: 'css/main.css' // 会将css文件打包为 dist/css/main.css }), ] // js output: { filename: 'js/main.js' } 复制代码
以上所述就是小编给大家介绍的《webpack基本使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。