webpack简单配置

262 阅读4分钟

Webpack构建流程

Webpack 的运行流程是一个串行的过程,从启动到结束会依次执行以下流程:

  • 初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数

  • 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译

  • 确定入口:根据配置中的 entry 找出所有的入口文件

  • 编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理

  • 完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系

  • 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会

  • 输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统

在以上过程中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack 提供的 API 改变 Webpack 的运行结果

简单说

  • 初始化:启动构建,读取与合并配置参数,加载 Plugin,实例化 Compiler

  • 编译:从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归地进行编译处理

  • 输出:将编译后的 Module 组合成 Chunk,将 Chunk 转换成文件,输出到文件系统中

以上内容链接:juejin.cn/post/684490…

webepack常用基本配置 entry,output,plugins,module(配置loader)

entry: {

bundle: [

'babel-polyfill',

'./src/index.js',

],

},

output: {

filename: '[name]_[chunkhash].js',

path: path.resolve(__dirname, 'dist/static'),

publicPath: , //给打包的js

},

//暂未完成

优化webpack打包流程,本人工作中常用的

1.happypack

在使用 Webpack 对项目进行构建时,会对大量文件进行解析和处理。当文件数量变多之后,Webpack 构件速度就会变慢。由于运行在 Node.js 之上的 Webpack 是单线程模型的,所以 Webpack 需要处理的任务要一个一个进行操作。

而 Happypack 的作用就是将文件解析任务分解成多个子进程并发执行。子进程处理完任务后再将结果发送给主进程。所以可以大大提升 Webpack 的项目构件速度

2.DLL

使用 DllPlugin 进行分包,使用 DllReferencePlugin(索引链接) 对 manifest.json 引用,让一些基本不会改动的代码先打包成静态资源,避免反复编译浪费时间。

3.Tree shaking

打包过程中检测工程中没有引用过的模块并进行标记,在资源压缩时将它们从最终的bundle中去掉(只能对ES6 Modlue生效) 开发中尽可能使用ES6 Module的模块,提高tree shaking效率

禁用 babel-loader 的模块依赖解析,否则 Webpack 接收到的就都是转换过的 CommonJS 形式的模块,无法进行 tree-shaking

4.sourcemap

mode为development 建议使用devtools:cheap-module-eval-source-map

production 一般不使用,减少打包体积, 如果需要针对线上问题还原压缩后js错误 ,快速定位异常   建议使用 devtools:cheap-module-source-map

5.code splitting

代码分割,例如一个业务文件引入很多第三方模块或者其他业务模块,会被引入的模块打包分割成新的文件 ,这样的该业务文件的修改,只需要重新编译打包修改的文件,不需要整个文件和引入的模块一起重新编译打包

1.同步代码 ,webepack.config.js 中配置

optimization: { 

splitChunks: {

chunks: 'all'

     }

}

2.异步引入代码 import()

无需做任何配置 ,webpack 会自动做代码分割

6.结合url-loader 对小图片打包转换成base字符串,减少http请求

7.css loader 解析顺序 从后往前. postcss-loader是做css兼容不同版本浏览器处理的