webpack学习(一)

一、使用Webpack的配置文件

文件webpack.config.js:

const path = require('path');
module.exports = {
  entry: './index.js', //要打包的文件
  output: {
    filename: 'bundle.js', //打包后文件的名字
    //__dirname指的是当前文件webpack.config.js所在的位置
    path: path.resolve(__dirname, 'bundle') //打包后文件所存放的位置
  }
}

1、webpack默认配置文件命名为webpack.config.js,在配置完成之后,使用命令npx webpack可打包文件。
2、如果配置文件的命名是其他形式,例如是:webpackconfig.js,可以使用命令npx webpack --config webpackconfig.js来打包文件。
3、可以在package.json文件中添加:

"script": {
	"bundle": "webpack"
}

然后使用npm run bundle命令进行打包。

二、浅析Webpack打包输出内容

文件webpack.config.js:

const path = require('path');
module.exports = {
  //打包时有警告:The 'mode' option has not been set,需要配置mode
  //production:打包后压缩代码,development:打包后不压缩代码
  mode: 'production',  //默认配置,但是添加之后不会有警告
  entry: './index.js', //要打包的文件
  output: {
    filename: 'bundle.js', //打包后文件的名字
    //__dirname指的是当前文件webpack.config.js所在的位置
    path: path.resolve(__dirname, 'bundle') //打包后文件所存放的位置
  }
}

三、什么是Loader(对于特定的文件定义如何打包)

loader就是webpack用来预处理模块的,在一个模块被引入之前,会预先使用loader处理模块的内容

module.exports = {
	module: {
		rules: [{
			test: /\.(jpg|png|gif)$/, //以.jpg结尾的文件
			use: {
				loader: 'file-loader',
				options: {
					name: '[name]_[hash].[ext]',  //打包后文件名称和后缀与打包前一致
					outputPath: 'images/'
				}
			}
		}]
	}
}

使用此loader需要用命令npm install file-loader -D来安装此loader。

module.exports = {
	module: {
		rules: [{
			test: /\.js$/, //以.js结尾的文件
			use: [{
				loader: 'babel-loader',
				options:{
					presets:['react'] // 预设处理里面的内容是jsx的,需要npm i -D babel-preset-react
				}
			}]
		}]
	}
}

使用此loader需要用命令npm install babel-loader babel-core -D来安装此loader,此loader是用来处理js结尾的文件的

module.exports = {
	module: {
		rules: [{
			test: /\.(jpg|png|gif)$/, //以.jpg结尾的文件
			use: {
				loader: 'url-loader',
				options: {
					name: '[name]_[hash].[ext]',  //打包后文件名称和后缀与打包前一致
					outputPath: 'images/',
					limit: 10240 //小于10240kb会以base64的格式打包在bundle.js文件中,大于才会生成文件
				}
			}
		}]
	}
}

使用此loader需要用命令npm install url-loader -D来安装此loader。

四、使用Loader打包静态资源

module.exports = {
	module: {
		rules: [{
			test: /\.(jpg|png|gif)$/, //以.jpg结尾的文件
			use: {
				loader: 'url-loader',
				options: {
					name: '[name]_[hash].[ext]',  
					outputPath: 'images/',
					limit: 10240 
				}
			}
		},{
			test: /\.(eot|ttf|svg)$/, 
			use: {
				loader: 'file-loader', //打包图标文字文件
			}
		},{
			test: /\.css$/, 
			use: [
				'style-loader',
				{
					loader: 'css-loader',
					options: {
						importLoaders :2 //表示在sass文件中额外引入的sass文件也会走postcss-loader和sass-loader
						modules: true //开启css模块化的打包,默认为false,即在一个文件中引入sass,会作用于此文件引入的其他模块中,开启之后则只作用于此模块。
					}
				},
				'sass-loader',
				'postcss-loader'
			] //打包css/sass结尾的文件
			//sass-loader:将模块中sass格式的样式解析成css格式的样式
			//css-loader:将模块中的样式生成最终的样式块
			//style-loader:将css-loader处理后的样式挂载到对应的节点上面
			//postcss-loader:
		}]
	}
}

1、使用此sass-loader需要用命令npm install sass-loader node-sass -D来安装此loader。
2、使用postcss-loader:给自己写的css添加需要的前缀。使用此模块需要新建一个文件postcss.config.js,此文件与webpack.config.js在同一目录,在里面添加:

module.exports = {
	plugins: [
		require('autoprefixer')
	]
}

给项目添加此模块使用命令npm install autoprefixer -D
3、如果加入modules: true,则引入sass方式改变为:import style from ‘./index.sass’; 使用方法为style.avatar

五、使用plugins让打包更便捷

const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
	plugins: [new HtmlWebpackPlugin()], //打包后自动生成index.html文件,并把打包生成的js自动引入到这个html文件中
	plugins: [new HtmlWebpackPlugin(
		template: 'src/index.html'  //使用此模板来生成打包后的html文件,生成的js文件会自动加到生成的html文件中
	),new CleanWebpackPlugin(
		'dist'  //每次打包之前都会自动将dist文件中的内容删除
	)]
}

使用命令 npm i html-webpack-plugin -D来安装

六、Entry与Output的基础配置

const path = require('path');
module.exports = {
  entry: {
	main: './src/index.js',
	sub: './src/index.js'
  },
  output: {
    publicPath: 'http://cdn.com.cn',  //打包之后需要加的路径
    filename: '[name].js', 
    path: path.resolve(__dirname, 'bundle') 
  }
}

打包之后的结果:
在这里插入图片描述在这里插入图片描述
后端加入地址打包之后的结果:
在这里插入图片描述

发布了35 篇原创文章 · 获赞 1 · 访问量 6718

猜你喜欢

转载自blog.csdn.net/qq_36162529/article/details/91451240