webpack基本使用(一)

第一次写博客,有点小小的兴奋,也有一点点的慌张~~~
我是一个小白,仅记录自己的学习过程,内容仅供参考。
1.最基本的:如何使用webpack
#npm/yarn install/add webpack

webpack默认的config文件名字必须是webpack.config.js,如果需要使用其他的名字,
在执行打包的时候,必须嗷这样来使用npm run --config webpacj.other.config.js。
有点长,不如配个脚本舒舒服服的,在package.json中的scripts中配置:
"build": "webpack --config webpack.other.config.js",然后执行一下npm run build,瞅瞅~~

2. 基本config

let path = require("path"); // 这个东西是webpack的核心,不需要安装,直接用就行了哟
module.exports = {
	// webpack打包时的环境,开发或者生产环境,由你选择,但是呢,我们一般会配置一个基本的webpack.config.js,里面配置一些公共的配置,然后另外新建两个webpack的配置文件,一个用于开发,一个用于生产环境,这样子我们在打包的时候,就省去了我们自己去修改mode了呀,毕竟代码能做的事情,我们这辈子都不可能手动去做哈
	mode: "production/development",
	// webpack没有打包html这个说法吧,所以说这个入口是js文件嗷!!
	entry: "./src/index.js", // webpack执行打包时的入口
	// 补充一哈,如果是多个入口打包的话,就是介个样子来写的哟,具体的用法,后面再更新嗷,不然都没有写的了~
	// entry: {
	// "home": "./src/home/index.js", 
	// "main": "./src/main/index.js"
	// },
	devServer: {}, // 这个应该很熟悉哦,代理,简直用的巴巴适适的嘛
	output: { // 跟入口文件对应起来的,有入口,肯定有出口的
		/* 这个地方,一定要注意,必须是绝对路径(要画重点,就像是没到节假日你的
		女朋友给你划重点的那样),但是在实际开发的过程中,这个
		路径我们根本没发写成绝对路径呀~难呐。因此,需要使用到
		webpack本身的一个核心模块path,这个模块会调用一个resolve
		方法,直接将相对路径就解析成了绝对路径。怎么样~是不是贼溜鼻的
		*/
		// zzff,这个大家可能不知道是什么,但是dist大家肯定熟悉吧,没错,这个就是我们在打包的时候生成的目录的名字
		path: path.resolve(__dirname, "zzff"),
		/* 入口打包出来之后,新生产的文件的名字,如果想要将生成的
		 index.js这个文件放在zzff目录下的某个文件夹下面呢,就只
		 需要这样写就行了:  filename: "js/index.js"
		*/
		filename: "index.js",
		/* 打包的所有文件,只要设计到引用的,例如:src="css/index.css",都会在路径的最前面加上www.zzff.cn,src就变成了	src="www.zzff.cn/css/index.js"
		是不是这个路径看着有种怪怪的感觉,有那就对了,一般呢,很少在这个地方配置域名的,一般都是./或者../,嘿嘿嘿~~~继续往下看^_^
		*/
		publicPath: "www.zzff.cn"	
	},
	// 这个很重要的,要划重点哦,
	// webpack的插件集合(我是这个样称呼它的),是一个数组,存放的是webpack需要使用的插件
	// 既然是插件,说明肯定不是webpack自带的,需要我们安装哈,使用到的插件安装会在底部统一例举
	plugins: [
		// 插件一半都是这么用的,要new它,当然各位朋友也可以用它来new个女/男朋友,哈哈哈~(^-^)
		new HtmlWebpackPlugin({ // html插件,打包之后在zzff目录下面会创建一个以html结尾的文件
		template: "./src/index.html", // 相当于entry,一个入口文件,这个必须要有的哦
		filename: "index.html/zf.html", // 熟吧,打包生成后的html文件的名字
		minify: { // 压缩html的一些config
			removeComments: true, // 清除html中的注释,默认为false
			collapseWhitespace: true, /* 清除html中的空格、换行符,相当于把html的内容全部打包成一行了,画面太美
			简直不敢想象。默认为false(这个配置我刚开始的时候使用
			是正常的,写文章复现的时候就不行了,知道的朋友麻烦给我
			说一下是怎么会事呢,灰常感谢)
			*/
			minifyCSS: true, // 压缩html页面中的css样式,有时候我们可能会将样式写在html中的style标签里面,这个时候就需要我们去进行压缩
			// 还有很多属性,就不一个一个例举了,毕竟百度才是万能的嘛
		} 
		hash: true, // 这个东西加上,在打包的时候,会在打包文件的后面随机生成一串哈希戳哦
		}),
		new MiniCssExtractPlugin({ // 抽离html中的css代码
			filename: ".css/index.css" //抽离出来的css代码放置在css文件夹下面的index.css文件中
			/* 	想了半天,难怪当初看的时候就只写了一个属性,这个要配合到loader来使用,贼舒服
			*/
		}),
		// webpack的插件太多佬,就不一一写了,以后遇上了再记录一下就OK了,也欢迎大家补充👏
	],
	module: {
		// 配置这些规则,是为了将webpack无法解析的模块转换成可以解析的模块
		// 这个也就是loader哦,loader全部都需要安装
		// loader的执行顺序: 从右向左 从下向上
		rules: [
			{test: /\.css$/, use: [
				// css-loader 负责解析css文件中的一些特殊语法,例:@import xxx 引入其他的css文件
            	// style-loader 负责把css文件插入到head标签中
            	MiniCssExtractPlugin.loader, // 表示将html中的css全部抽离出来,放置到index.css文件
                    //中,然后link标签自动将index.css文件引入到html中
                    'css-loader',

                    // 注意位置一定不能错,需要在处理css-loader之前执行
                    // postcss-loader 在打包过程中会自动给style中的属性带上浏览器的
                    // 前缀⭐️ 如果直接运行的话会报错,需要给postcss在根目录下添加一个
                    // 配置名为postcss.config.js的文件,具体配置信息请看post.config.js配置文件

                    // 如果需要将scss转换成css并插入到html中的话,还需要安装 node-sass sass-loader这两个包
                    'postcss-loader',
                ]
            },
            {test: /\.js$/, use: [
                    // 校验eslint规范
                    // 安装 npm i eslint eslint-loader -D
                    // 配置eslint规则可以在eslint的官网中的 演示->eslint demo -> 点击 rules configuration -> 选择需要的配置 -> Download .eslintrc.json file with this configuration(默认
                    //  下载的是eslintrc.json,需要自己手动在文件名前加一个.,文件名变成.eslintrc.json -> 然后放置到项目的root目录下,与src同级)
                    {
                        loader: 'eslint-loader',
                        options: {
                            enforce: 'pre', // 该属性表示让eslint强制在js文件打包之前执行
                            // enforce: 'post', // post属性表示eslint校验强制在js文件打包之后执行
                        }
                    }
                ],
            },
            // ES6转ES5的loader npm i label-loader @babel/core @babel/preset-env
            // @babel/core是babel的核心包,提供转换源代码的API
            // @babel/preset-env 这是一个插件'库', 该模块将高级的js语法转换成较低级的语法
            // 如果使用的ES7的语法,则还需要安装@babel/plugin-proposal-class-properties这个插件
            {test: /\.js$/,
             exclude: /node_modules/, // 匹配js文件,但是不匹配node_modules中的js文件
             include: path.resolve(__dirname, 'src'), // 只匹配src目录下的js文件 
             use: [
                    {
                        loader: 'babel-loader',
                        options: {
                            presets: [ // js插件 库 集合
                                '@babel/preset-env', // 该插件库用来将ES6转换成ES5
                            ],
                            // @log
                            // class log{} @+函数名 类的装饰器(具体使用方法请自行百度),在编译时可以将class语法糖编译成我们熟悉的js语法
                            // 如果要使用类的装饰器,还需要安装对应的插件,详情见babel官网
                            plugins: [
                                // loose: true 表示宽松模式
                                ["@babel/plugin-proposal-decorators", { "legacy": true }], //类的装饰器使用的插件,注意:顺序不能放错
                                
                                // 该插件的作用是解析类的属性,比如使用到ES7的class语法糖
                                ["@babel/plugin-proposal-class-properties", { "loose" : true }], //类的装饰器使用的插件,注意:顺序不能放错
                                
                                // @babel/plugin-transform-runtime安装该插件是将压缩后的js文件中的相同的代码抽离出来,实例上的方法默认是不会解析的
                                // 如果是一些更高级的写法则无法解析,需要安装@babel/polyfill补丁模块,这个补丁模块需要引用到代码里面,所以不能只在dev环境中使用(不加-D)
                                [
                                    "@babel/plugin-transform-runtime",
                                    // { // 需要去搜这些是干嘛用的
                                    //   "absoluteRuntime": false,
                                    //   "corejs": false,
                                    //   "helpers": true,
                                    //   "regenerator": true,
                                    //   "useESModules": false,
                                    //   "version": "7.0.0-beta.0"
                                    // }
                                  ]
                            ]
                        }
                    }
                ]
            },

            // 图片打包file-loader
            {
                test: /\.(png|jpg|gif)$/,
                use: {
                    // file-loader是打包图片的loader,在js文件中引入的图片是图片的地址,打包之后在zzff(dist)目录下是找不到对应路径的
                    // 此时需要使用file-loader这个loader来进行处理,将图片的路径转成哈希编码,然后会对路径自动进行解析
                    // file-loader打包的是js,css文件中的图片的路径,但是不会打包html中img引入放入图片的路径,需要使用html-withimg-loader来打包html中的img路径
                    // url-loader 做一个限制,当图片小于64k的时候,会用base64打包图片,转成base64码 如果大于,则会默认使用file-loader打包图片,打包出来的是一个真实的图片
                    // loader: 'file-loader',
                    loader: 'file-loader',
                    options:{
                        // limit: 200 * 1024, // 表示当图片小于200*1024的时候,全部转成base64,如果大于,则默认会使用file-loader打包一个真实的图片
                        esModule:false,
                        outputPath: '/img/', // 表示将图片打包到zzff/img目录下
                        publicPath: 'http://www.zzff.cn' // 表示只给所有的图片位置加上该公共路径
                    } 
                }
            },
            // 打包html页面中的图片路径
            {
                test: /\.(html|html)$/,
                use: "html-withimg-loader"
            }
		]
	},
}

emmmmmm~~写不动了,后面整理一下在写,脑壳有点晕了😷

整理一下需要安装的插件(需要使用require引入)
npm install html-webpack-plugin -D
npm install Mini-css-extract-plugin -D
babel插件,不需要使用require引入,直接在rules中使用即可
npm install @babel/core @babel/preset-env style-loader css-loader eslint eslint-loader postcss-loader scss-loader @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties @babel/plugin-transform-runtime file-loader url-loader html-withimg-loader
// 可能存在遗漏的插件,报错的时候自行百度安装

第一篇博客终于诞生了,虽然很烂,总的来说是一个好的开始的,如果写的有问题的地方还请各位大佬多多指教~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值