首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第9章 开发环境调优
9.1 Webpack开发效率插件
9.1.1 webpack-dashboard
9.1.2 webpack-merge
9.1.3 speed-measure-webpack-plugin
9.1.4 size-plugin
9.2 模块热替换
9.2.1 开启HMR
9.2.2 HMR原理
9.2.3 HMR API示例
第10章 Webpack打包机制
10.1 总览
10.2 准备工作
10.3 缓存加载
10.4 模块打包
10.4.1 Compiler
10.4.2 Compilation
10.4.3 Resolver
10.4.4 Module Factory
10.4.5 Parser
10.4.6 模板渲染
10.5 深入Webpack插件
10.5.1 Tapable
10.5.2 插件的协同模式
第11章 实战案例
11.1 React应用
11.1.1 基础配置
11.1.2 JavaScript处理
11.1.3 TypeScript处理
11.1.4 样式处理
11.1.5 静态资源
11.1.6 多页应用公共代码优化
11.1.7 长效缓存
11.2 Vue应用
11.2.1 手动搭建Vue项目
11.2.2 通过@vue/cli搭建项目
第12章 更多JavaScript打包工具
12.1 Rollup
12.1.1 配置
12.1.2 Rollup去除死代码
12.1.3 可选的输出格式
12.1.4 使用Rollup构建JavaScript库
12.2 Parcel
12.2.1 打包速度
12.2.2 零配置
12.3 esbuild
12.3.1 打包速度
当前位置:
首页>>
技术小册>>
Webpack实战:入门、进阶与调优(下)
小册名称:Webpack实战:入门、进阶与调优(下)
### 11.1.1 基础配置 在Webpack的世界中,基础配置是每位开发者踏上Webpack之旅的第一步,也是理解其强大功能和灵活性的基石。Webpack作为一个现代JavaScript应用程序的静态模块打包器(module bundler),通过其配置文件(通常是`webpack.config.js`)来定义项目的打包规则、入口文件、输出设置、加载器(loader)和插件(plugin)等关键信息。本节将深入解析Webpack的基础配置,帮助读者从零开始构建并理解Webpack项目的核心结构。 #### 11.1.1.1 Webpack配置文件概览 Webpack的配置文件是一个Node.js模块,Webpack根据这个模块导出的配置对象来执行打包任务。尽管Webpack的配置可以非常复杂,但基础配置通常包含以下几个核心部分: - **entry(入口)**:定义Webpack应该使用哪个模块(通常是JavaScript文件)作为构建其内部依赖图的开始。 - **output(输出)**:告诉Webpack在哪里输出它所创建的bundles,以及如何命名这些文件。 - **module(模块)**:定义了如何处理项目中的不同类型模块。 - **plugins(插件)**:用于执行范围更广的任务,如打包优化、资源管理和环境变量注入等。 - **resolve(解析)**:配置Webpack如何找到模块对应的文件。 - **devServer(开发服务器)**(可选):为开发环境提供了一个简单的web服务器和实时重新加载(live reloading)功能。 #### 11.1.1.2 入口配置(entry) 入口起点(entry point)指示Webpack应该使用哪个模块来作为构建其内部依赖图的开始。在Webpack中,默认值是`./src/index.js`,但你可以通过`webpack.config.js`文件中的`entry`属性来修改它。 ```javascript module.exports = { entry: './path/to/my/entry/file.js', // 其他配置... }; ``` 对于多页面应用程序(MPA),你可以使用对象语法来定义多个入口起点: ```javascript module.exports = { entry: { main: './path/to/main.js', vendor: './path/to/vendor.js' }, // 其他配置... }; ``` #### 11.1.1.3 输出配置(output) `output`属性告诉Webpack在哪里输出它所创建的bundles,以及如何命名这些文件。至少,你需要指定`filename`和`path`属性: ```javascript module.exports = { output: { filename: 'bundle.js', // 单入口点时的文件名 path: path.resolve(__dirname, 'dist'), // 输出目录的绝对路径 // 对于多入口点,可以使用占位符来确保文件名唯一 // filename: '[name].bundle.js', // publicPath: '/assets/', // 指向输出资源(例如,在浏览器中加载的脚本)的公共URL地址 }, // 其他配置... }; ``` #### 11.1.1.4 模块配置(module) `module.rules`数组允许你定义一系列规则,用于使用不同的loader处理不同类型的模块。Loader是Webpack中用于预处理模块的脚本(预处理器)。 ```javascript module.exports = { module: { rules: [ { test: /\.css$/, // 匹配.css文件 use: [ 'style-loader', // 将JS字符串生成为style节点 'css-loader' // 将CSS转化成CommonJS模块 ], }, { test: /\.jsx?$/, // 匹配.js和.jsx文件 exclude: /node_modules/, // 排除node_modules目录 use: { loader: 'babel-loader', // 使用babel-loader转换JSX为JS options: { presets: ['@babel/preset-env', '@babel/preset-react'] // 指定babel预设 } } }, // 更多loader配置... ] }, // 其他配置... }; ``` #### 11.1.1.5 插件配置(plugins) 插件用于执行范围更广的任务,比如打包优化、资源管理和环境变量注入等。要在Webpack中使用插件,你首先需要通过`npm`安装它,然后在`webpack.config.js`文件中的`plugins`数组里引用它。 ```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入插件 module.exports = { plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' // 指定模板文件 }), // 其他插件... ], // 其他配置... }; ``` #### 11.1.1.6 解析配置(resolve) `resolve`配置项用于配置Webpack如何解析模块。例如,你可以配置Webpack在哪些目录下查找第三方模块,或者如何解析文件扩展名。 ```javascript module.exports = { resolve: { // 设置模块解析时应该搜索的目录 modules: ['node_modules', path.resolve(__dirname, 'src/some/directory')], // 自动解析确定的扩展 extensions: ['.js', '.json', '.jsx', '.ts'], // 配置别名,简化模块引入路径 alias: { Components: path.resolve(__dirname, 'src/components/'), // 更多别名... }, // 其他resolve配置... }, // 其他配置... }; ``` #### 11.1.1.7 开发服务器配置(devServer,可选) `devServer`配置允许你快速搭建一个本地开发服务器,并且支持实时重新加载(live reloading)和模块热替换(hot module replacement, HMR)等功能。 ```javascript module.exports = { devServer: { static: './dist', // 静态文件目录 open: true, // 自动打开浏览器 port: 3000, // 指定端口号 hot: true, // 开启模块热替换 compress: true, // 启用gzip压缩 // 其他devServer配置... }, // 其他配置... }; ``` ### 总结 Webpack的基础配置涵盖了项目的入口点、输出设置、模块处理规则、插件使用、模块解析规则以及开发服务器设置等关键方面。通过合理配置这些选项,你可以构建出高效、灵活且易于维护的Web应用程序。然而,Webpack的强大之处远不止于此,随着项目的增长和复杂度的提升,你可能需要进一步探索其高级特性和最佳实践,如代码分割、懒加载、缓存优化等。希望本节内容能为你开启Webpack实战之旅打下坚实的基础。
上一篇:
11.1 React应用
下一篇:
11.1.2 JavaScript处理
该分类下的相关小册推荐:
全解webpack前端开发环境定制
webpack指南
Webpack实战:入门、进阶与调优(上)
Webpack零基础入门
Webpack实战:入门、进阶与调优(中)