爱网站找不到了,微机做网站的软件,做网站销售 优帮云,做物流哪个网站货源多webpack 旧项目的问题下一代构建工具 Vite 主角 #xff1a;webpack安装webpack1#xff0c;mode的选项2#xff0c;使用source map 精准定位错误行数3#xff0c;使用watch mode(观察模式)#xff0c;自动运行4#xff0c;使用webpack-dev-server工具#xff0c;自动刷… webpack 旧项目的问题下一代构建工具 Vite 主角 webpack安装webpack1mode的选项2使用source map 精准定位错误行数3使用watch mode(观察模式)自动运行4使用webpack-dev-server工具自动刷新 自定义webpack配置初始化代码webpack处理资源模块asset moduleasset/resourceasset/inlineasset/sourceasset 管理资源loadercss-loader抽离style里代码并压缩知识点补充在css里面加载图片资源知识点补充加载fonts字体知识点补充加载csv,tsv,xml数据自定义JSON模块parser 使用babel-loader转换js文件regeneratorRuntime插件 旧项目的问题 作用域问题 return 抛出赋给变量 如何解决代码拆分问题 module.exports()抛出模块require()接受模块 如何让游览器支持node模块 下一代构建工具 Vite
主角 webpack
它可以帮助我们打包javascript的应用程序同时支持es的模块化以及commonjs可以扩展支持很多的静态资源打包图片字体样式等只能理解js和json这样的文件出色的功能除了引入js还可以使用内置的资源模块
引用千峰教育一个图
安装webpack 安1npm init -y 安2npm install webpack webpack-cli --save-dev 安3 npm install html-webpack-plugin -D 执行完前两个会产生三个文件第三个是为了自动引入资源
1mode的选项 mode: none, //不展示编译时候的警告还可以选择development2使用source map 精准定位错误行数
当我们游览器报错点击报错内容时发现报错的指向不是源文件时候不好排除错误 devtool: inline-source-map, //可以精准的锁定出错位置行数,并且打包出的文件不再是乱码3使用watch mode(观察模式)自动运行
每次编译代码都需要手动运行npx webpack会显得很麻烦运行 npx webpack --watch但还有点问题现在弄完还需要游览器再刷新一下如何自动刷新游览器
4使用webpack-dev-server工具自动刷新
安4. npm install webpack-dev-server -D配置里面添加 devServer: {static: ./dist, //需要热模块更新的文件},自定义webpack配置初始化代码 在本地开发环境里安装所以加-D // path.resolve(_dirname,./dist)获取文件的绝对路径参数一代表当前文件的物理路径参数2是基于这个路径下的文件路径
const path require(path);
// HtmlWebpackPlugin可以自动引入资源文件
const HtmlWebpackPlugin require(html-webpack-plugin);module.exports {// 入口文件的地址entry: ./src/index.js,output: {// 指定输出文件的文件名filename: budle.js,// 指定输出路径,这个要设置为绝对路径,webpack.config.js配置文件中---- dirname 必须为两个下划线“_ _”否则打包报错path: path.resolve(__dirname, ./dist),// 打包前清理上一次无用的打包内容clean: true,},// 不展示编译时候的警告还可以选择developmentmode: none,// 可以精准的锁定出错位置行数,并且打包出的文件不再是乱码devtool: inline-source-map,plugins: [// 创建一个插件的实例对象new HtmlWebpackPlugin({template: ./index.html, // 模板filename: app.html, // 输出的文件名,inject: body, // 自定义标签的放置位置,默认在head}),],//运行路径devServer: {static: ./dist, //需要热模块更新的文件},
};
webpack处理资源模块asset module
资源模块的类型称之为asset module type四种类型
asset/resource
会发送一个单独的文件并导出URL
output: {filename: budle.js,path: path.resolve(_dirname, ./dist), clean: true, // assetModuleFilename: images/test.png//方法2定义资源模块的输出包名//但是不能每个文件名都叫这个名所以要根据文件的内容来生成一个哈希的字符串,生成后缀名assetModuleFilename: images/[contenthash].[ext], },
moduleS: {//加载资源模块rules: [{test: /\.png$/,type: asset/resource, //资源类型generator: {//方法1优先级高filename: images/[contenthash][ext], //修改生成的文件的文件名},},],},asset/inline
会导出一个资源的Data URL但不会产生打包文件一般生成的就是游览器可查看的base64格式的路径
{test: /\.svg$/,type: asset/inline, //资源类型},asset/source
会导出资源的源代码但不会产生打包文件
{test: /\.txt$/,type: asset/source, //资源类型},asset
会在导出一个Data URL和发送一个单独的文件之间自动进行选择自动的在resource和inline之间进行选择小于8kb的文件将会 视为inline模块否则会被视为resource模块类型 管理资源loader
为了解决webpack只能理解js和json这样的文件理解不了其他文件的问题支持链式调用且逆加载
css-loader npm install css-loader -D npm install style-loader -D //会帮助我们把css放置到页面上 配置一下
{test: /\.css$/,use: [style-loader, css-loader],//顺序不能颠倒
},想要加载lesssass等这样的css文件npm install less-loader less -D配置完需要重新启动一下
{test: /\.(css|less)$/,use: [style-loader, css-loaderless-loader],//顺序不能颠倒
},抽离style里代码并压缩
目前上面的css和页面在一起想要将style里面的这些代码抽离出来npm Install mini-css-extract-plugin -D依赖webpack5环境接下来开始配置步骤一导入
const MiniCssExtractPlugin require(mini-css-extract-plugin);
//MiniCssExtractPlugin把css提取到单独的文件中步骤二实例化一下 并且可以修改存放文件名 步骤三添加loader 步骤四文件打包了但没有压缩 解决思路 npm install css-minimizer-webpack-plugin -D 步骤一导入
const CssMinimizerPlugin require(css-minimizer-webpack-plugin);
//压缩css文件步骤二在优化的配置里面配置 步骤三
知识点补充在css里面加载图片资源 知识点补充加载fonts字体 像字体这样的其他资源如何可以接收并加载任何文件然后将其输出到构建目录 步骤一配置 步骤二.
知识点补充加载csv,tsv,xml数据
可以使用csv-loader和xml-loadernpm install csv-loader xml-loader -D 步骤二在使用的js文件中引入要使用的文件即可
import Xml from ./assets/data.xml;
import Csv from ./assets/data.csv;自定义JSON模块parser
替代特定的webpack loader可以将任何tomlyaml或json5文件作为JSON模块导入npm install toml yaml json5 -D 步骤三正常引入使用即可
使用babel-loader转换js文件
npm install babel-loader babel/core babel/preset-env -D因为webpack只能做js模块化的打包并不能转化js里的代码所以babel-loader转换将ES6转换成低版本的游览器能够识别的ES代码注意点;这样写会将nodemodule中的js也编译所以需要排除一下使用exclude属性
regeneratorRuntime插件 运行上述babel-loader的项目发现有报错regeneratorRuntime regeneratorRuntime是webpack打包生成的全局辅助函数由babel生成用于兼容async/await的语法 最后修改一下配置