当前位置: 首页 > news >正文

学做美食视频网站哈尔滨城市规划建设网

学做美食视频网站,哈尔滨城市规划建设网,seo外链发布技巧,手机网站开发流程.Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具#xff0c;一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析#xff0c;打包生成…Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析打包生成对应的静态资源(bundle)。 1.2 webpack 核心概念 1.2.1 Entry 入口(Entry)指示 webpack 以哪个文件为入口起点开始打包分析构建内部依赖图。 在 Webpack 中entry 属性指定了 Webpack 用来构建其内部依赖图的起点或入口点。换句话说entry 告诉 Webpack 从哪里开始打包代码。 entry 属性的用法 entry 属性的值可以是以下几种类型 字符串单个入口文件。数组多个入口文件这些文件的内容会被打包到一个 bundle 中。对象多个入口点每个入口点会生成一个独立的 bundle。 1. 字符串类型的 entry 这是最简单的用法指定一个单一的入口文件 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };在这种情况下Webpack 从 ./src/index.js 开始构建依赖图并将所有模块打包到 bundle.js 文件中。 2. 数组类型的 entry 如果你有多个文件需要作为入口但希望将它们打包到一个 bundle 中可以使用数组 module.exports {entry: [./src/index.js, ./src/anotherModule.js],output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };这种情况下index.js 和 anotherModule.js 会被打包到同一个 bundle.js 文件中。 3. 对象类型的 entry 对象类型的 entry 允许你定义多个独立的入口点每个入口点会生成一个独立的 bundle module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),}, };在这种情况下会生成两个独立的 bundle 文件app.bundle.js 和 admin.bundle.js。[name] 是一个占位符会被 entry 对象的键替换。 高级用法 动态入口 可以通过函数返回一个对象来动态生成入口点 module.exports {entry: () {const entries {main: ./src/main.js,};if (process.env.NODE_ENV development) {entries.dev ./src/dev.js;}return entries;},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),}, };这种方式允许根据环境或其他条件动态配置入口点。 使用多个入口和 SplitChunks 插件 通过配合 SplitChunksPlugin可以将共享代码提取到一个独立的 chunk 中 module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),},optimization: {splitChunks: {chunks: all,},}, };这种配置会将 app.js 和 admin.js 中的共享模块提取到一个公共的 bundle 中从而减少重复代码。 配置示例 以下是一个更完整的 Webpack 配置示例展示了不同类型的 entry 配置和一些常见的插件配置 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin);module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].bundle.js,path: path.resolve(__dirname, dist),publicPath: /,},mode: production,module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: babel-loader,},{test: /\.css$/,use: [style-loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,chunks: [app], // 仅包含 app chunk}),new HtmlWebpackPlugin({template: ./src/admin-template.html,filename: admin.html,chunks: [admin], // 仅包含 admin chunk}),],optimization: {splitChunks: {chunks: all,},}, };总结 entry 属性是 Webpack 配置中的一个重要部分它定义了 Webpack 构建的入口点。通过灵活使用字符串、数组和对象类型的 entry你可以实现不同的构建策略和优化代码拆分。结合 Webpack 的其他特性如插件和优化选项可以构建高效、可维护的前端项目。 1.2.2 Output 输出(Output)指示 webpack 打包后的资源 bundles 输出到哪里去以及如何命名。 output 属性是 Webpack 配置中的一个关键部分它定义了打包后输出文件的相关设置。通过配置 output你可以指定打包文件的名称、路径、公共路径等。 基本配置 1. filename filename 用于指定输出文件的名称。可以使用占位符来生成动态文件名。 module.exports {entry: ./src/index.js,output: {filename: bundle.js, // 输出文件名path: path.resolve(__dirname, dist), // 输出路径}, };常用的占位符包括 [name]: 入口点名称[id]: chunk ID[hash]: 编译时的唯一 hash[chunkhash]: chunk 的 hash[contenthash]: 文件内容的 hash module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].js, // 动态生成文件名path: path.resolve(__dirname, dist),}, };2. path path 用于指定输出目录的绝对路径。通常使用 Node.js 的 path 模块来生成绝对路径。 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist), // 使用绝对路径}, };3. publicPath publicPath 用于指定输出解析文件的公共 URL 地址。通常用于配置 CDN 地址或开发服务器地址。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),publicPath: /, // 公共路径通常用于配置 CDN 地址}, };高级配置 1. chunkFilename chunkFilename 用于指定按需加载的 chunk 文件的名称模板。类似于 filename可以使用占位符。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),chunkFilename: [name].[contenthash].js, // 按需加载的 chunk 文件名}, };2. assetModuleFilename assetModuleFilename 用于指定通过资源模块如图像、字体等处理的文件的输出文件名模板。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),assetModuleFilename: assets/[name].[hash][ext], // 资源模块文件名}, };3. library 和 libraryTarget library 和 libraryTarget 用于将你的 bundle 输出为一个库。 library 指定库的名称。libraryTarget 指定导出库的方式如 var, umd, commonjs2 等。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),library: MyLibrary, // 库名称libraryTarget: umd, // 输出库的方式}, };常见示例 示例 1简单的单入口点配置 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };示例 2多入口点配置 const path require(path);module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].js,path: path.resolve(__dirname, dist),}, };示例 3配置公共路径 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),publicPath: https://cdn.example.com/assets/, // 使用 CDN 地址}, };示例 4配置资源模块输出 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),assetModuleFilename: images/[name].[hash][ext], // 资源模块文件名},module: {rules: [{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],}, };详细解释 filename指定输出文件的名称可以使用占位符动态生成文件名。path指定输出目录的绝对路径通常使用 Node.js 的 path.resolve 方法。publicPath指定公共路径通常用于配置 CDN 地址或开发服务器地址。chunkFilename指定按需加载的 chunk 文件的名称模板。assetModuleFilename指定资源模块处理的文件输出名称模板。library 和 libraryTarget用于将你的 bundle 输出为一个库指定库的名称和导出方式。 通过配置 output 属性可以灵活地控制 Webpack 打包输出文件的名称、路径和其他相关设置以满足各种需求。 1.2.3 Loader Loader 让 webpack 能 够 去 处 理 那 些 非 JavaScript 文 件 (webpack 自 身 只 理 解 JavaScript) 在 Webpack 中Loader 是一种用于转换模块的机制。在 Webpack 中一切文件都是模块而 Loader 则用于告诉 Webpack 如何处理那些非 JavaScript 文件例如CSS、图片、字体、TypeScript 等。通过使用 Loader你可以在 import 或 require 模块时预处理文件并将它们转换为 JavaScript 模块。 使用 Loader 的步骤 安装 Loader通过 npm 安装所需的 Loader。配置 Webpack在 Webpack 配置文件中定义 Loader 规则。 常用 Loader 示例 1. 处理 CSS 文件的 Loader 安装 style-loader 和 css-loader npm install style-loader css-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.css$/i,use: [style-loader, css-loader],},],}, };这个配置会使用 css-loader 将 CSS 文件解析成 JavaScript 可以理解的模块然后使用 style-loader 将 CSS 注入到 DOM 中。 2. 处理图像文件的 Loader 安装 file-loader 或 url-loader npm install file-loader url-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource, // 使用内置资源模块},],}, };asset/resource 会将图像文件单独输出到指定目录并返回图像的 URL。 3. 处理字体文件的 Loader 字体文件可以使用与图像文件类似的 file-loader 或 url-loader这里使用 Webpack 5 内置的资源模块 // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: asset/resource, // 使用内置资源模块},],}, };4. 处理 Sass 文件的 Loader 安装 sass-loader、sassDart Sass、style-loader 和 css-loader npm install sass-loader sass style-loader css-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.scss$/i,use: [style-loader, css-loader, sass-loader],},],}, };这个配置会使用 sass-loader 将 Sass 文件编译成 CSS然后使用 css-loader 和 style-loader 处理 CSS。 5. 处理 Babel 的 JavaScript 文件 安装 babel-loader 和 Babel 的相关包 npm install babel-loader babel/core babel/preset-env --save-dev配置 Webpack 和 Babel // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: babel-loader,options: {presets: [babel/preset-env],},},},],}, };6. 处理 TypeScript 文件 安装 ts-loader 和 TypeScript npm install ts-loader typescript --save-dev配置 Webpack 和 TypeScript // webpack.config.js const path require(path);module.exports {entry: ./src/index.ts,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},resolve: {extensions: [.ts, .js],},module: {rules: [{test: /\.ts$/,use: ts-loader,exclude: /node_modules/,},],}, };Loader 配置详解 每个 Loader 规则通常包含以下几个属性 test: 一个正则表达式匹配文件路径。use: 定义使用的 loader可以是字符串或对象或 loader 和选项的数组。exclude: 排除某些文件路径。include: 仅处理某些文件路径。 例如下面是一个更复杂的 Loader 配置示例 module.exports {module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: babel-loader,options: {presets: [babel/preset-env],},},},{test: /\.css$/i,use: [style-loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},{test: /\.scss$/i,use: [style-loader, css-loader, sass-loader],},{test: /\.ts$/,exclude: /node_modules/,use: ts-loader,},{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: asset/resource,},],}, };总结 Loader 是 Webpack 用来转换模块的工具可以将非 JavaScript 文件转换为 JavaScript 模块。安装 Loader通过 npm 安装所需的 Loader。配置 Webpack在 Webpack 配置文件中定义 Loader 规则使用 test、use、exclude、include 等属性来配置 Loader。常见的 Loadercss-loader、style-loader、file-loader、url-loader、sass-loader、babel-loader、ts-loader 等。 通过合理使用 Loader可以让 Webpack 处理各种类型的文件从而实现更复杂和灵活的构建过程。 1.2.4 Plugins 插件(Plugins)可以用于执行范围更广的任务。插件的范围包括从打包优化和压缩 在 Webpack 中插件Plugins用于执行更广泛的任务比如打包优化、资源管理和环境变量注入等。插件的功能比 Loader 更强大和灵活Loader 主要用于转换单个文件而插件可以直接操作整个构建过程。 使用插件的基本步骤 安装插件通过 npm 安装所需的插件。引入插件在 Webpack 配置文件中引入插件。配置插件在 Webpack 配置文件的 plugins 数组中配置插件。 常用插件及其示例 1. HtmlWebpackPlugin HtmlWebpackPlugin 用于简化 HTML 文件的创建以便为 Webpack 打包后的文件提供服务。它可以自动生成一个 HTML 文件并将打包后的文件自动插入其中。 安装插件 npm install html-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new HtmlWebpackPlugin({template: ./src/template.html, // 使用的 HTML 模板文件filename: index.html, // 生成的 HTML 文件名}),], };2. CleanWebpackPlugin CleanWebpackPlugin 在每次构建前清理输出目录确保输出目录只包含生产文件。 安装插件 npm install clean-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const { CleanWebpackPlugin } require(clean-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new CleanWebpackPlugin(), // 默认会清理 output.path 目录], };3. MiniCssExtractPlugin MiniCssExtractPlugin 用于将 CSS 提取到单独的文件中。它支持按需加载 CSS 和 SourceMaps。 安装插件 npm install mini-css-extract-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const MiniCssExtractPlugin require(mini-css-extract-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.css$/i,use: [MiniCssExtractPlugin.loader, css-loader],},],},plugins: [new MiniCssExtractPlugin({filename: [name].css, // 输出的 CSS 文件名}),], };4. DefinePlugin DefinePlugin 允许你在编译时创建配置的全局常量。它非常有用可以根据不同的环境定义不同的变量值。 安装插件 DefinePlugin 是 Webpack 内置的插件不需要安装。 配置 Webpack // webpack.config.js const path require(path); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(production),}),], };5. HotModuleReplacementPlugin HotModuleReplacementPlugin 启用模块热替换允许在运行时更新各种模块而无需进行完全刷新。 安装插件 HotModuleReplacementPlugin 是 Webpack 内置的插件不需要安装。 配置 Webpack // webpack.config.js const path require(path); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},devServer: {contentBase: path.resolve(__dirname, dist),hot: true, // 启用热模块替换},plugins: [new webpack.HotModuleReplacementPlugin(),], };6. CopyWebpackPlugin CopyWebpackPlugin 用于将单个文件或整个目录复制到构建目录中。 安装插件 npm install copy-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const CopyWebpackPlugin require(copy-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new CopyWebpackPlugin({patterns: [{ from: src/assets, to: assets }, // 将 src/assets 目录复制到 dist/assets],}),], };配置示例 以下是一个更完整的 Webpack 配置示例展示了不同插件的组合使用 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin); const MiniCssExtractPlugin require(mini-css-extract-plugin); const webpack require(webpack); const CopyWebpackPlugin require(copy-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: [name].[contenthash].js,path: path.resolve(__dirname, dist),publicPath: /,},mode: production,module: {rules: [{test: /\.css$/i,use: [MiniCssExtractPlugin.loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,filename: index.html,}),new MiniCssExtractPlugin({filename: [name].[contenthash].css,}),new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(production),}),new CopyWebpackPlugin({patterns: [{ from: src/assets, to: assets },],}),], };总结 插件 是 Webpack 中非常强大和灵活的工具用于执行打包优化、资源管理和环境变量注入等任务。安装插件通过 npm 安装所需的插件。引入插件在 Webpack 配置文件中引入插件。配置插件在 Webpack 配置文件的 plugins 数组中配置插件。 通过合理使用插件可以极大地增强 Webpack 的功能满足各种复杂的构建需求。 1.2.5 Mode 模式(Mode)指示 webpack 使用相应模式的配置。 在 Webpack 中mode 是一个重要的配置项它可以设置 Webpack 在不同的模式下运行。mode 参数有三个可选值 development开发模式设置为该模式会启用有用的开发工具和优化构建速度。production生产模式设置为该模式会启用各种优化如代码压缩、作用域提升和去除未使用代码。none不使用任何默认优化或开发工具提供最大程度的配置灵活性。 mode 配置 你可以在 Webpack 配置文件中设置 mode或者在命令行参数中传递。 在配置文件中设置 mode // webpack.config.js module.exports {mode: development, // development or production or noneentry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };在命令行参数中设置 mode webpack --mode development webpack --mode production webpack --mode none各模式下的默认配置 development 开发模式下启用的一些默认配置 process.env.NODE_ENV 被设置为 development启用 NamedChunksPlugin 和 NamedModulesPlugindevtool 被设置为 eval生成原始源代码 (没有对 module 进行优化)输出未被压缩的构建 示例 // webpack.config.js module.exports {mode: development,entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},devtool: eval, // 快速生成 source maps };production 生产模式下启用的一些默认配置 process.env.NODE_ENV 被设置为 production启用模块连接优化 (module concatenation) 和压缩输出devtool 被设置为 source-map生成映射到原始源代码的 source maps启用各种优化例如 tree shaking、代码压缩TerserPlugin 示例 // webpack.config.js module.exports {mode: production,entry: ./src/index.js,output: {filename: bundle.[contenthash].js,path: path.resolve(__dirname, dist),},devtool: source-map, // 生成 source maps 以便调试 };none 不使用任何默认优化或开发工具可以最大程度地自定义配置。 示例 // webpack.config.js module.exports {mode: none,entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };mode 对构建结果的影响 mode 的值会影响到构建结果的大小、性能和调试体验。例如 开发模式 (development) 启用 source maps帮助开发者调试代码输出未被压缩的代码构建速度快利于快速迭代启用详细的错误信息和警告帮助发现问题 生产模式 (production) 进行代码压缩和优化减少输出文件的大小启用 tree shaking去除未使用的代码生成高质量的 source maps帮助生产环境下的调试 示例 以下是一个完整的 Webpack 配置示例展示了如何根据不同的模式进行配置 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin); const MiniCssExtractPlugin require(mini-css-extract-plugin); const webpack require(webpack);module.exports (env, argv) {const isProduction argv.mode production;return {entry: ./src/index.js,output: {filename: isProduction ? bundle.[contenthash].js : bundle.js,path: path.resolve(__dirname, dist),publicPath: /,},mode: argv.mode || development,devtool: isProduction ? source-map : eval,module: {rules: [{test: /\.css$/i,use: [isProduction ? MiniCssExtractPlugin.loader : style-loader,css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,filename: index.html,}),new MiniCssExtractPlugin({filename: [name].[contenthash].css,}),new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(argv.mode),}),],devServer: {contentBase: path.resolve(__dirname, dist),hot: !isProduction,},}; };这个配置示例展示了如何根据不同的模式来调整构建输出、开发工具和插件配置。通过设置 mode你可以方便地在开发模式和生产模式之间切换从而提高开发效率和构建质量。 1.2.6 devServer devServer 是 Webpack 提供的一个开发服务器选项主要用于提升开发体验。它可以提供一个本地服务器自动重新加载浏览器支持热模块替换Hot Module Replacement, HMR方便开发者在开发过程中实时查看代码更改效果。 使用 devServer 要使用 devServer你需要安装 webpack-dev-server npm install --save-dev webpack-dev-server配置 devServer devServer 配置项需要添加到 Webpack 配置文件中。下面是一些常用的配置选项 基本配置 // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {contentBase: path.resolve(__dirname, dist),compress: true, // 启用 gzip 压缩port: 9000, // 服务器端口号},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),], };热模块替换HMR 热模块替换允许在不刷新整个页面的情况下更新应用程序中的模块。这对于保持应用程序状态非常有用。 // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {contentBase: path.resolve(__dirname, dist),hot: true, // 启用 HMR},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),new webpack.HotModuleReplacementPlugin(), // 启用 HMR 插件], };在你的 JavaScript 文件中你需要添加一些代码来处理模块更新 if (module.hot) {module.hot.accept(./module.js, function () {console.log(Accepting the updated module!);// 使用新的模块进行重新渲染等操作}); }配置示例 以下是一个更完整的 Webpack 配置示例包括了各种 devServer 配置项 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {static: {directory: path.join(__dirname, dist), // 提供内容的目录},compress: true, // 启用 gzip 压缩port: 9000, // 服务器端口号open: true, // 自动打开浏览器hot: true, // 启用 HMRhistoryApiFallback: true, // 适用于单页面应用程序proxy: { // 代理 API 请求/api: http://localhost:3000,},},module: {rules: [{test: /\.css$/i,use: [style-loader, css-loader],},],},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),new webpack.HotModuleReplacementPlugin(), // 启用 HMR 插件], };常用的 devServer 配置选项 static.directory指定静态文件所在的目录。compress是否启用 gzip 压缩。port指定开发服务器运行的端口。open是否在服务器启动后自动打开浏览器。hot是否启用热模块替换HMR。historyApiFallback是否启用 HTML5 历史记录 API 回退功能适用于单页面应用。proxy设置代理将特定请求代理到另一个服务器。 总结 devServer 是 Webpack 中一个非常强大的工具它可以极大地提升开发体验。通过使用 devServer开发者可以快速启动一个本地服务器实时查看代码修改效果甚至在不刷新页面的情况下更新模块。通过合理配置 devServer可以更高效地进行前端开发。# Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析打包生成对应的静态资源(bundle)。 1.2 webpack 核心概念 1.2.1 Entry 入口(Entry)指示 webpack 以哪个文件为入口起点开始打包分析构建内部依赖图。 在 Webpack 中entry 属性指定了 Webpack 用来构建其内部依赖图的起点或入口点。换句话说entry 告诉 Webpack 从哪里开始打包代码。 entry 属性的用法 entry 属性的值可以是以下几种类型 字符串单个入口文件。数组多个入口文件这些文件的内容会被打包到一个 bundle 中。对象多个入口点每个入口点会生成一个独立的 bundle。 1. 字符串类型的 entry 这是最简单的用法指定一个单一的入口文件 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };在这种情况下Webpack 从 ./src/index.js 开始构建依赖图并将所有模块打包到 bundle.js 文件中。 2. 数组类型的 entry 如果你有多个文件需要作为入口但希望将它们打包到一个 bundle 中可以使用数组 module.exports {entry: [./src/index.js, ./src/anotherModule.js],output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };这种情况下index.js 和 anotherModule.js 会被打包到同一个 bundle.js 文件中。 3. 对象类型的 entry 对象类型的 entry 允许你定义多个独立的入口点每个入口点会生成一个独立的 bundle module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),}, };在这种情况下会生成两个独立的 bundle 文件app.bundle.js 和 admin.bundle.js。[name] 是一个占位符会被 entry 对象的键替换。 高级用法 动态入口 可以通过函数返回一个对象来动态生成入口点 module.exports {entry: () {const entries {main: ./src/main.js,};if (process.env.NODE_ENV development) {entries.dev ./src/dev.js;}return entries;},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),}, };这种方式允许根据环境或其他条件动态配置入口点。 使用多个入口和 SplitChunks 插件 通过配合 SplitChunksPlugin可以将共享代码提取到一个独立的 chunk 中 module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].bundle.js,path: path.resolve(__dirname, dist),},optimization: {splitChunks: {chunks: all,},}, };这种配置会将 app.js 和 admin.js 中的共享模块提取到一个公共的 bundle 中从而减少重复代码。 配置示例 以下是一个更完整的 Webpack 配置示例展示了不同类型的 entry 配置和一些常见的插件配置 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin);module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].bundle.js,path: path.resolve(__dirname, dist),publicPath: /,},mode: production,module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: babel-loader,},{test: /\.css$/,use: [style-loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,chunks: [app], // 仅包含 app chunk}),new HtmlWebpackPlugin({template: ./src/admin-template.html,filename: admin.html,chunks: [admin], // 仅包含 admin chunk}),],optimization: {splitChunks: {chunks: all,},}, };总结 entry 属性是 Webpack 配置中的一个重要部分它定义了 Webpack 构建的入口点。通过灵活使用字符串、数组和对象类型的 entry你可以实现不同的构建策略和优化代码拆分。结合 Webpack 的其他特性如插件和优化选项可以构建高效、可维护的前端项目。 1.2.2 Output 输出(Output)指示 webpack 打包后的资源 bundles 输出到哪里去以及如何命名。 output 属性是 Webpack 配置中的一个关键部分它定义了打包后输出文件的相关设置。通过配置 output你可以指定打包文件的名称、路径、公共路径等。 基本配置 1. filename filename 用于指定输出文件的名称。可以使用占位符来生成动态文件名。 module.exports {entry: ./src/index.js,output: {filename: bundle.js, // 输出文件名path: path.resolve(__dirname, dist), // 输出路径}, };常用的占位符包括 [name]: 入口点名称[id]: chunk ID[hash]: 编译时的唯一 hash[chunkhash]: chunk 的 hash[contenthash]: 文件内容的 hash module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].js, // 动态生成文件名path: path.resolve(__dirname, dist),}, };2. path path 用于指定输出目录的绝对路径。通常使用 Node.js 的 path 模块来生成绝对路径。 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist), // 使用绝对路径}, };3. publicPath publicPath 用于指定输出解析文件的公共 URL 地址。通常用于配置 CDN 地址或开发服务器地址。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),publicPath: /, // 公共路径通常用于配置 CDN 地址}, };高级配置 1. chunkFilename chunkFilename 用于指定按需加载的 chunk 文件的名称模板。类似于 filename可以使用占位符。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),chunkFilename: [name].[contenthash].js, // 按需加载的 chunk 文件名}, };2. assetModuleFilename assetModuleFilename 用于指定通过资源模块如图像、字体等处理的文件的输出文件名模板。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),assetModuleFilename: assets/[name].[hash][ext], // 资源模块文件名}, };3. library 和 libraryTarget library 和 libraryTarget 用于将你的 bundle 输出为一个库。 library 指定库的名称。libraryTarget 指定导出库的方式如 var, umd, commonjs2 等。 module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),library: MyLibrary, // 库名称libraryTarget: umd, // 输出库的方式}, };常见示例 示例 1简单的单入口点配置 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };示例 2多入口点配置 const path require(path);module.exports {entry: {app: ./src/app.js,admin: ./src/admin.js,},output: {filename: [name].[contenthash].js,path: path.resolve(__dirname, dist),}, };示例 3配置公共路径 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),publicPath: https://cdn.example.com/assets/, // 使用 CDN 地址}, };示例 4配置资源模块输出 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),assetModuleFilename: images/[name].[hash][ext], // 资源模块文件名},module: {rules: [{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],}, };详细解释 filename指定输出文件的名称可以使用占位符动态生成文件名。path指定输出目录的绝对路径通常使用 Node.js 的 path.resolve 方法。publicPath指定公共路径通常用于配置 CDN 地址或开发服务器地址。chunkFilename指定按需加载的 chunk 文件的名称模板。assetModuleFilename指定资源模块处理的文件输出名称模板。library 和 libraryTarget用于将你的 bundle 输出为一个库指定库的名称和导出方式。 通过配置 output 属性可以灵活地控制 Webpack 打包输出文件的名称、路径和其他相关设置以满足各种需求。 1.2.3 Loader Loader 让 webpack 能 够 去 处 理 那 些 非 JavaScript 文 件 (webpack 自 身 只 理 解 JavaScript) 在 Webpack 中Loader 是一种用于转换模块的机制。在 Webpack 中一切文件都是模块而 Loader 则用于告诉 Webpack 如何处理那些非 JavaScript 文件例如CSS、图片、字体、TypeScript 等。通过使用 Loader你可以在 import 或 require 模块时预处理文件并将它们转换为 JavaScript 模块。 使用 Loader 的步骤 安装 Loader通过 npm 安装所需的 Loader。配置 Webpack在 Webpack 配置文件中定义 Loader 规则。 常用 Loader 示例 1. 处理 CSS 文件的 Loader 安装 style-loader 和 css-loader npm install style-loader css-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.css$/i,use: [style-loader, css-loader],},],}, };这个配置会使用 css-loader 将 CSS 文件解析成 JavaScript 可以理解的模块然后使用 style-loader 将 CSS 注入到 DOM 中。 2. 处理图像文件的 Loader 安装 file-loader 或 url-loader npm install file-loader url-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource, // 使用内置资源模块},],}, };asset/resource 会将图像文件单独输出到指定目录并返回图像的 URL。 3. 处理字体文件的 Loader 字体文件可以使用与图像文件类似的 file-loader 或 url-loader这里使用 Webpack 5 内置的资源模块 // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: asset/resource, // 使用内置资源模块},],}, };4. 处理 Sass 文件的 Loader 安装 sass-loader、sassDart Sass、style-loader 和 css-loader npm install sass-loader sass style-loader css-loader --save-dev配置 Webpack // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.scss$/i,use: [style-loader, css-loader, sass-loader],},],}, };这个配置会使用 sass-loader 将 Sass 文件编译成 CSS然后使用 css-loader 和 style-loader 处理 CSS。 5. 处理 Babel 的 JavaScript 文件 安装 babel-loader 和 Babel 的相关包 npm install babel-loader babel/core babel/preset-env --save-dev配置 Webpack 和 Babel // webpack.config.js const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: babel-loader,options: {presets: [babel/preset-env],},},},],}, };6. 处理 TypeScript 文件 安装 ts-loader 和 TypeScript npm install ts-loader typescript --save-dev配置 Webpack 和 TypeScript // webpack.config.js const path require(path);module.exports {entry: ./src/index.ts,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},resolve: {extensions: [.ts, .js],},module: {rules: [{test: /\.ts$/,use: ts-loader,exclude: /node_modules/,},],}, };Loader 配置详解 每个 Loader 规则通常包含以下几个属性 test: 一个正则表达式匹配文件路径。use: 定义使用的 loader可以是字符串或对象或 loader 和选项的数组。exclude: 排除某些文件路径。include: 仅处理某些文件路径。 例如下面是一个更复杂的 Loader 配置示例 module.exports {module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: babel-loader,options: {presets: [babel/preset-env],},},},{test: /\.css$/i,use: [style-loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},{test: /\.scss$/i,use: [style-loader, css-loader, sass-loader],},{test: /\.ts$/,exclude: /node_modules/,use: ts-loader,},{test: /\.(woff|woff2|eot|ttf|otf)$/i,type: asset/resource,},],}, };总结 Loader 是 Webpack 用来转换模块的工具可以将非 JavaScript 文件转换为 JavaScript 模块。安装 Loader通过 npm 安装所需的 Loader。配置 Webpack在 Webpack 配置文件中定义 Loader 规则使用 test、use、exclude、include 等属性来配置 Loader。常见的 Loadercss-loader、style-loader、file-loader、url-loader、sass-loader、babel-loader、ts-loader 等。 通过合理使用 Loader可以让 Webpack 处理各种类型的文件从而实现更复杂和灵活的构建过程。 1.2.4 Plugins 插件(Plugins)可以用于执行范围更广的任务。插件的范围包括从打包优化和压缩 在 Webpack 中插件Plugins用于执行更广泛的任务比如打包优化、资源管理和环境变量注入等。插件的功能比 Loader 更强大和灵活Loader 主要用于转换单个文件而插件可以直接操作整个构建过程。 使用插件的基本步骤 安装插件通过 npm 安装所需的插件。引入插件在 Webpack 配置文件中引入插件。配置插件在 Webpack 配置文件的 plugins 数组中配置插件。 常用插件及其示例 1. HtmlWebpackPlugin HtmlWebpackPlugin 用于简化 HTML 文件的创建以便为 Webpack 打包后的文件提供服务。它可以自动生成一个 HTML 文件并将打包后的文件自动插入其中。 安装插件 npm install html-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new HtmlWebpackPlugin({template: ./src/template.html, // 使用的 HTML 模板文件filename: index.html, // 生成的 HTML 文件名}),], };2. CleanWebpackPlugin CleanWebpackPlugin 在每次构建前清理输出目录确保输出目录只包含生产文件。 安装插件 npm install clean-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const { CleanWebpackPlugin } require(clean-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new CleanWebpackPlugin(), // 默认会清理 output.path 目录], };3. MiniCssExtractPlugin MiniCssExtractPlugin 用于将 CSS 提取到单独的文件中。它支持按需加载 CSS 和 SourceMaps。 安装插件 npm install mini-css-extract-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const MiniCssExtractPlugin require(mini-css-extract-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},module: {rules: [{test: /\.css$/i,use: [MiniCssExtractPlugin.loader, css-loader],},],},plugins: [new MiniCssExtractPlugin({filename: [name].css, // 输出的 CSS 文件名}),], };4. DefinePlugin DefinePlugin 允许你在编译时创建配置的全局常量。它非常有用可以根据不同的环境定义不同的变量值。 安装插件 DefinePlugin 是 Webpack 内置的插件不需要安装。 配置 Webpack // webpack.config.js const path require(path); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(production),}),], };5. HotModuleReplacementPlugin HotModuleReplacementPlugin 启用模块热替换允许在运行时更新各种模块而无需进行完全刷新。 安装插件 HotModuleReplacementPlugin 是 Webpack 内置的插件不需要安装。 配置 Webpack // webpack.config.js const path require(path); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},devServer: {contentBase: path.resolve(__dirname, dist),hot: true, // 启用热模块替换},plugins: [new webpack.HotModuleReplacementPlugin(),], };6. CopyWebpackPlugin CopyWebpackPlugin 用于将单个文件或整个目录复制到构建目录中。 安装插件 npm install copy-webpack-plugin --save-dev配置 Webpack // webpack.config.js const path require(path); const CopyWebpackPlugin require(copy-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},plugins: [new CopyWebpackPlugin({patterns: [{ from: src/assets, to: assets }, // 将 src/assets 目录复制到 dist/assets],}),], };配置示例 以下是一个更完整的 Webpack 配置示例展示了不同插件的组合使用 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin); const MiniCssExtractPlugin require(mini-css-extract-plugin); const webpack require(webpack); const CopyWebpackPlugin require(copy-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: [name].[contenthash].js,path: path.resolve(__dirname, dist),publicPath: /,},mode: production,module: {rules: [{test: /\.css$/i,use: [MiniCssExtractPlugin.loader, css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,filename: index.html,}),new MiniCssExtractPlugin({filename: [name].[contenthash].css,}),new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(production),}),new CopyWebpackPlugin({patterns: [{ from: src/assets, to: assets },],}),], };总结 插件 是 Webpack 中非常强大和灵活的工具用于执行打包优化、资源管理和环境变量注入等任务。安装插件通过 npm 安装所需的插件。引入插件在 Webpack 配置文件中引入插件。配置插件在 Webpack 配置文件的 plugins 数组中配置插件。 通过合理使用插件可以极大地增强 Webpack 的功能满足各种复杂的构建需求。 1.2.5 Mode 模式(Mode)指示 webpack 使用相应模式的配置。 在 Webpack 中mode 是一个重要的配置项它可以设置 Webpack 在不同的模式下运行。mode 参数有三个可选值 development开发模式设置为该模式会启用有用的开发工具和优化构建速度。production生产模式设置为该模式会启用各种优化如代码压缩、作用域提升和去除未使用代码。none不使用任何默认优化或开发工具提供最大程度的配置灵活性。 mode 配置 你可以在 Webpack 配置文件中设置 mode或者在命令行参数中传递。 在配置文件中设置 mode // webpack.config.js module.exports {mode: development, // development or production or noneentry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };在命令行参数中设置 mode webpack --mode development webpack --mode production webpack --mode none各模式下的默认配置 development 开发模式下启用的一些默认配置 process.env.NODE_ENV 被设置为 development启用 NamedChunksPlugin 和 NamedModulesPlugindevtool 被设置为 eval生成原始源代码 (没有对 module 进行优化)输出未被压缩的构建 示例 // webpack.config.js module.exports {mode: development,entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},devtool: eval, // 快速生成 source maps };production 生产模式下启用的一些默认配置 process.env.NODE_ENV 被设置为 production启用模块连接优化 (module concatenation) 和压缩输出devtool 被设置为 source-map生成映射到原始源代码的 source maps启用各种优化例如 tree shaking、代码压缩TerserPlugin 示例 // webpack.config.js module.exports {mode: production,entry: ./src/index.js,output: {filename: bundle.[contenthash].js,path: path.resolve(__dirname, dist),},devtool: source-map, // 生成 source maps 以便调试 };none 不使用任何默认优化或开发工具可以最大程度地自定义配置。 示例 // webpack.config.js module.exports {mode: none,entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),}, };mode 对构建结果的影响 mode 的值会影响到构建结果的大小、性能和调试体验。例如 开发模式 (development) 启用 source maps帮助开发者调试代码输出未被压缩的代码构建速度快利于快速迭代启用详细的错误信息和警告帮助发现问题 生产模式 (production) 进行代码压缩和优化减少输出文件的大小启用 tree shaking去除未使用的代码生成高质量的 source maps帮助生产环境下的调试 示例 以下是一个完整的 Webpack 配置示例展示了如何根据不同的模式进行配置 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const { CleanWebpackPlugin } require(clean-webpack-plugin); const MiniCssExtractPlugin require(mini-css-extract-plugin); const webpack require(webpack);module.exports (env, argv) {const isProduction argv.mode production;return {entry: ./src/index.js,output: {filename: isProduction ? bundle.[contenthash].js : bundle.js,path: path.resolve(__dirname, dist),publicPath: /,},mode: argv.mode || development,devtool: isProduction ? source-map : eval,module: {rules: [{test: /\.css$/i,use: [isProduction ? MiniCssExtractPlugin.loader : style-loader,css-loader],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: asset/resource,},],},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: ./src/template.html,filename: index.html,}),new MiniCssExtractPlugin({filename: [name].[contenthash].css,}),new webpack.DefinePlugin({process.env.NODE_ENV: JSON.stringify(argv.mode),}),],devServer: {contentBase: path.resolve(__dirname, dist),hot: !isProduction,},}; };这个配置示例展示了如何根据不同的模式来调整构建输出、开发工具和插件配置。通过设置 mode你可以方便地在开发模式和生产模式之间切换从而提高开发效率和构建质量。 1.2.6 devServer devServer 是 Webpack 提供的一个开发服务器选项主要用于提升开发体验。它可以提供一个本地服务器自动重新加载浏览器支持热模块替换Hot Module Replacement, HMR方便开发者在开发过程中实时查看代码更改效果。 使用 devServer 要使用 devServer你需要安装 webpack-dev-server npm install --save-dev webpack-dev-server配置 devServer devServer 配置项需要添加到 Webpack 配置文件中。下面是一些常用的配置选项 基本配置 // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {contentBase: path.resolve(__dirname, dist),compress: true, // 启用 gzip 压缩port: 9000, // 服务器端口号},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),], };热模块替换HMR 热模块替换允许在不刷新整个页面的情况下更新应用程序中的模块。这对于保持应用程序状态非常有用。 // webpack.config.js const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {contentBase: path.resolve(__dirname, dist),hot: true, // 启用 HMR},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),new webpack.HotModuleReplacementPlugin(), // 启用 HMR 插件], };在你的 JavaScript 文件中你需要添加一些代码来处理模块更新 if (module.hot) {module.hot.accept(./module.js, function () {console.log(Accepting the updated module!);// 使用新的模块进行重新渲染等操作}); }配置示例 以下是一个更完整的 Webpack 配置示例包括了各种 devServer 配置项 const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); const webpack require(webpack);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist),},mode: development,devServer: {static: {directory: path.join(__dirname, dist), // 提供内容的目录},compress: true, // 启用 gzip 压缩port: 9000, // 服务器端口号open: true, // 自动打开浏览器hot: true, // 启用 HMRhistoryApiFallback: true, // 适用于单页面应用程序proxy: { // 代理 API 请求/api: http://localhost:3000,},},module: {rules: [{test: /\.css$/i,use: [style-loader, css-loader],},],},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,}),new webpack.HotModuleReplacementPlugin(), // 启用 HMR 插件], };常用的 devServer 配置选项 static.directory指定静态文件所在的目录。compress是否启用 gzip 压缩。port指定开发服务器运行的端口。open是否在服务器启动后自动打开浏览器。hot是否启用热模块替换HMR。historyApiFallback是否启用 HTML5 历史记录 API 回退功能适用于单页面应用。proxy设置代理将特定请求代理到另一个服务器。 总结 devServer 是 Webpack 中一个非常强大的工具它可以极大地提升开发体验。通过使用 devServer开发者可以快速启动一个本地服务器实时查看代码修改效果甚至在不刷新页面的情况下更新模块。通过合理配置 devServer可以更高效地进行前端开发。
http://www.w-s-a.com/news/82920/

相关文章:

  • 四川省成华区建设局网站网站专业制作
  • 网站建设如何开票网站后台怎么做超链接
  • 教育网站设计方案建设网站技术公司电话号码
  • 建网站要定制还是第三方系统传奇网站模板psd
  • 免费搭建企业网站什么叫网站定位
  • 网站建设cms程序员培训班
  • 网站seo技术wordpress editor ios
  • 红酒网站设计成立公司需要哪些手续
  • 广州做网站哪个好网站建网站建设网站站网站
  • 如何快速提升网站pr短剧个人主页简介模板
  • 上海网站建设 永灿百度权重3的网站值多少
  • 公司展示网站模板模板工
  • 网站建设收费详情舟山公司做网站
  • 深圳宝安区住房和建设局网站html模板大全
  • 和田哪里有做网站的地方wordpress地址更改
  • 恒通建设集团有限公司网站企业网站百度指数多少算竞争大
  • 雅虎网站收录提交入口如何使用wordpress搭建网站
  • 微商城网站建设怎么样发稿是什么意思
  • dz建站与wordpress群晖做网站服务器速度快吗
  • 做手机网站的公司网站建设 app开发 图片
  • 网站开发技术背景介绍wordpress数据库重置密码
  • 开发建设网站的实施过程是一个logo设计品牌
  • 做360pc网站排名首页工程造价信息网官网首页
  • 产品销售网站模块如何设计大数据和网站开发
  • 现在帮别人做网站赚钱不济南做网站建设公司
  • 嘉兴网站建设哪家好最近三天的国际新闻大事
  • 安丘网站建设制作做网站口碑比较好的大公司
  • 成都专业做网站公司哪家好优化大师下载安装免费
  • 防蚊手环移动网站建设广东深圳有几个区
  • 网站建设找哪些平台宜兴网站开发