2023年6月21日发(作者:)

Webpack初始化配置初始化webpack项⽬1. 在当前位置创建⼀个空⽬录 $ mkdir webpack-demo(⽬录名)2. cd webpack-demo ⽬录,初始化⼀个 $ npm init3. 安装'webpack'与'webpack-cli' $ npm install webpack webpack-cli -D4. 创建⼊⼝js⽂件与html⽂件,$ npm touch src/5. 创建⽂件 $ touch 执⾏依赖包⾥的⼆进制⽂件, 在 npm version >= 5.2.0 开始,默认安装了npx如:可以直接通过npx webpack命令执⾏编译打包,不需要⽤到./node_modules/.bin/webpack -v// 是webpack⾃⾝定义的默认配置⽂件名,会覆盖webpack的默认配置项// webpack默认只能识别JS模块,其他模块是不识别的, loader就是帮助webpack来识别并解析除了JS的其他模块的, loader的配置主要在中进⾏//loader的主要作⽤ 1.识别⽂件类型,确定具体处理该模块的loader () 2.使⽤对应的loader, 对⽂件进⾏相关操作转换 ()const path = require('path')const HtmlWebpackPlugin = require('html-webpack-plugin')/**1.为html⽂件中引⼊的外部资源每次更新后的hash,防⽌引⽤缓存的外部⽂件问题

* 2.可以⽣成创建html⼊⼝⽂件,⽐如单页⾯会⽣成⼀个html⽂件⼊⼝,如果配置多个html-webpack-plugin即可⽣成多个页⾯⼊⼝**/const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 清理dist⽂件夹const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将分离css插件,⽤于⽣产环境, 若开发环境⽤的话,就⽆法样式模块热更新s = { entry: { main: './src/' //⼊⼝⽂件 }, output: { // 输出⽂件配置 filename: '', // 输出⽂件名 path: e(__dirname, 'dist') // output的path需要绝对路径,使⽤的path模块来解析为绝对路径 }, mode: "development", devServer: { contentBase: './dist', // 启动的⽬录 open: false, // ⾃动打开浏览器 proxy: { // 设置代理,解决跨域请求问题 "/api": { target: "127.0.0.1:5500" } }, port: 8088, // 指定端⼝号 hot: true, // 开启HMR(Hot Module Replacement) 热模块替换,由于是webpack⾃带的,所以要引⼊webpack, 监控并更新js模块的⼯作vue等框架⾃⼰做了,否则需要⾃⼰拖 // hotOnly: true 在某些模块不⽀持热更新的情况下,不会刷新页⾯,只在控制台输出热更新失败 before(app, server, compiler) { // 当html发⽣改变时,重新加载页⾯ const watchFiles = ['.html']; ('done', () => { const changedFiles = (); if ( && (filePath => es((filePath).ext)) ) { ite(s, 'content-changed'); } }) } }, // ⾮js模块的配置 module: { rules: [ { test: /.(jpe?g|png|git)$/, use: { loader: "url-loader", options: { name: "[name]-[hash:7].[ext]", // []表⽰占位符(placeholder),name表⽰源⽂件的名字,ext是源⽂件的后缀,还可以连接hash: [name]-[hash].[ext] name: "[name]-[hash:7].[ext]", // []表⽰占位符(placeholder),name表⽰源⽂件的名字,ext是源⽂件的后缀,还可以连接hash: [name]-[hash].[ext] outputPath: "images", // 输出的图⽚⽂件夹 limit: 10000 // 限制当图⽚⼩于10000以下,将图⽚转化为base64 } } }, { test: /.css$/, use: [ // 执⾏顺序:由下⾄上,由右⾄左 'style-loader', // 把合并后的css直接放在页⾯的style样式上 // { // loader: // }, // 将css分离出来 'css-loader' // 合并css ] }, { test: /.scss$/, use: [ 'style-loader', // { // loader: // }, // 将css分离出来 'css-loader', 'sass-loader', // 将sass转化为css,依赖node-sass模块(npm i sass-loader node-sass -D) 'postcss-loader' // ⾃动添加需要前缀的样式, 还需安装autoprefixer依赖包 ] } ] }, // plugins,是⽤于扩展webpack的功能,本⾝是⼀个类,通过在构造函数中传⼊不同参数实现不同功能, 数组⾥⾯的项即是插件的实例 plugins: [ // 执⾏顺序由上⾄下 new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: [(__dirname, "dist")] }),

new HtmlWebpackPlugin({ // ⾃动⽣成html并打包⾄输出的⽬录中 title: 'html模板', filename: '', template: "./" }), new MiniCssExtractPlugin({ // 将css分离出来 filename: '[name].css', // 输出⽂件名

chunkFilename: '[id].css', // 模块名 }) ], devtool: 'cheap-module-eval-source-map' // ⽤于开发环境,打包后的⽂件与源码的映射⽂件,打包后在dist⽂件夹中会多出后缀为map的映射⽂件,⽅便定位到具体错误所在,}// 使⽤postcss-loader需要在根⽬录添加⼀个⽂件 $mkdir s = { plugins: [ require('autoprefixer') ]}

2023年6月21日发(作者:)

Webpack初始化配置初始化webpack项⽬1. 在当前位置创建⼀个空⽬录 $ mkdir webpack-demo(⽬录名)2. cd webpack-demo ⽬录,初始化⼀个 $ npm init3. 安装'webpack'与'webpack-cli' $ npm install webpack webpack-cli -D4. 创建⼊⼝js⽂件与html⽂件,$ npm touch src/5. 创建⽂件 $ touch 执⾏依赖包⾥的⼆进制⽂件, 在 npm version >= 5.2.0 开始,默认安装了npx如:可以直接通过npx webpack命令执⾏编译打包,不需要⽤到./node_modules/.bin/webpack -v// 是webpack⾃⾝定义的默认配置⽂件名,会覆盖webpack的默认配置项// webpack默认只能识别JS模块,其他模块是不识别的, loader就是帮助webpack来识别并解析除了JS的其他模块的, loader的配置主要在中进⾏//loader的主要作⽤ 1.识别⽂件类型,确定具体处理该模块的loader () 2.使⽤对应的loader, 对⽂件进⾏相关操作转换 ()const path = require('path')const HtmlWebpackPlugin = require('html-webpack-plugin')/**1.为html⽂件中引⼊的外部资源每次更新后的hash,防⽌引⽤缓存的外部⽂件问题

* 2.可以⽣成创建html⼊⼝⽂件,⽐如单页⾯会⽣成⼀个html⽂件⼊⼝,如果配置多个html-webpack-plugin即可⽣成多个页⾯⼊⼝**/const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 清理dist⽂件夹const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将分离css插件,⽤于⽣产环境, 若开发环境⽤的话,就⽆法样式模块热更新s = { entry: { main: './src/' //⼊⼝⽂件 }, output: { // 输出⽂件配置 filename: '', // 输出⽂件名 path: e(__dirname, 'dist') // output的path需要绝对路径,使⽤的path模块来解析为绝对路径 }, mode: "development", devServer: { contentBase: './dist', // 启动的⽬录 open: false, // ⾃动打开浏览器 proxy: { // 设置代理,解决跨域请求问题 "/api": { target: "127.0.0.1:5500" } }, port: 8088, // 指定端⼝号 hot: true, // 开启HMR(Hot Module Replacement) 热模块替换,由于是webpack⾃带的,所以要引⼊webpack, 监控并更新js模块的⼯作vue等框架⾃⼰做了,否则需要⾃⼰拖 // hotOnly: true 在某些模块不⽀持热更新的情况下,不会刷新页⾯,只在控制台输出热更新失败 before(app, server, compiler) { // 当html发⽣改变时,重新加载页⾯ const watchFiles = ['.html']; ('done', () => { const changedFiles = (); if ( && (filePath => es((filePath).ext)) ) { ite(s, 'content-changed'); } }) } }, // ⾮js模块的配置 module: { rules: [ { test: /.(jpe?g|png|git)$/, use: { loader: "url-loader", options: { name: "[name]-[hash:7].[ext]", // []表⽰占位符(placeholder),name表⽰源⽂件的名字,ext是源⽂件的后缀,还可以连接hash: [name]-[hash].[ext] name: "[name]-[hash:7].[ext]", // []表⽰占位符(placeholder),name表⽰源⽂件的名字,ext是源⽂件的后缀,还可以连接hash: [name]-[hash].[ext] outputPath: "images", // 输出的图⽚⽂件夹 limit: 10000 // 限制当图⽚⼩于10000以下,将图⽚转化为base64 } } }, { test: /.css$/, use: [ // 执⾏顺序:由下⾄上,由右⾄左 'style-loader', // 把合并后的css直接放在页⾯的style样式上 // { // loader: // }, // 将css分离出来 'css-loader' // 合并css ] }, { test: /.scss$/, use: [ 'style-loader', // { // loader: // }, // 将css分离出来 'css-loader', 'sass-loader', // 将sass转化为css,依赖node-sass模块(npm i sass-loader node-sass -D) 'postcss-loader' // ⾃动添加需要前缀的样式, 还需安装autoprefixer依赖包 ] } ] }, // plugins,是⽤于扩展webpack的功能,本⾝是⼀个类,通过在构造函数中传⼊不同参数实现不同功能, 数组⾥⾯的项即是插件的实例 plugins: [ // 执⾏顺序由上⾄下 new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: [(__dirname, "dist")] }),

new HtmlWebpackPlugin({ // ⾃动⽣成html并打包⾄输出的⽬录中 title: 'html模板', filename: '', template: "./" }), new MiniCssExtractPlugin({ // 将css分离出来 filename: '[name].css', // 输出⽂件名

chunkFilename: '[id].css', // 模块名 }) ], devtool: 'cheap-module-eval-source-map' // ⽤于开发环境,打包后的⽂件与源码的映射⽂件,打包后在dist⽂件夹中会多出后缀为map的映射⽂件,⽅便定位到具体错误所在,}// 使⽤postcss-loader需要在根⽬录添加⼀个⽂件 $mkdir s = { plugins: [ require('autoprefixer') ]}