调试webpack
调试webpack
1. 摘要
用过构建工具webpack的朋友应该都体会,面对其几百行的配置内容如大海一小舟,找不到边。看文档查百度,对其构建的生命周期看了又看。最终还是很茫然。原因很简单,构建配置一般都是通过脚手架工具自动生成。看似每天在用,其实接触很少。直到有一天,发现社区的插件不能满足需求时,相信你一定会定制一个自己的插件。这时你需要彻底了解它的机制,作为开发,调试代码一定是了解内部逻辑最好的方法。原文公众号地址
不管是 npm 还是 webpack 都是基于nodejs的工具。所以最终是调试node。这里我介绍三种调试的方法。需要提前准备好以下工具
- vscode
- google chrome
使用npm初始一个项目命名为webpacktest。需要源码的朋友可关注公众号小院不小,回复 webpackdebug。安装项目依赖
npm i -D webpack webpack-cli
添加webpack配置文件,并在其中使用debugger设置一个断点。
const path = require('path');
debugger;
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: "index.js"
}
};
2. (方法一)使用vscode运行npm调试
在新建项目的package.json文件scripts项中添加一个key为debug的配置,内容如下
...
"scripts": {
"build": "webpack",
"debug": "node --inspect-brk=5858 ./node_modules/webpack/bin/webpack"
}
...
vscode中选择调页签,在左上角调试的下拉框中选择添加配置,选择Node环境。vscode会自动生成一个 launch.json 文件,将文件的内容调整为以下内容
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "build",
"stopOnEntry": true,
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"debug"
],
"port": 5858
}
]
}
其中端口配置需要和inspect-brk配置的端口保持一致。stopOnEntry表示在运行的第一行代码中添加断点,点击开始调试按钮,即可进入如下界面

继续点击运行,即可进入配置文件设置的断点

其中左边的小红点是,直接在vscode中添加的断点。此断点也可中断。
3. (方法二)使用vscode运行node调试
我们细看在package.js文件中配置的调试脚本,其实是运行node,所以就想是否可以不通过npm直接运行。经过测试,确实是可以的。回到我们launch.json文件,将配置文件改为如下
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Node",
"stopOnEntry": true,
"program": "${workspaceFolder}/node_modules/webpack/bin/webpack"
}
]
}
点击开始调试, 依然可得到方法一中一样的调试结果。通过这种方式,没有package.json文件的约束。更简单也减少了错误的几率。
4. (方法三)命令行结合Chrome调试
在命令行中输入命令 node --inspect-brk ./node_modules/webpack/bin/webpack,为了方便,我们这还是使用vscode,运行效果如下

打开chrome浏览器,在地址栏输入 chrome://inspect/#devices,在界面中点击inspect,此时熟悉的界面就出来了,和平时调试前端一样。显示如下

点击后,便可进入断点,如下

在点击下调试按钮,可进入我们在配置文件中设置的断点

5. 总结
在以前就配置过调试webpack,时间久了就忘了,这次突然有需求了又查了好久资料。想想了想,还是总结分享出来。做开发,每天接触的多,还是要多写。
若仔细看文章的朋友,所谓三个方法都是围绕命令 node --inspect-brk ./node_modules/webpack/bin/webpack .我在查询资料时,最初得到的命令是 node --inspect-brk ./node_modules/.bin/webpack,这命令会出现错误。
欢迎感兴趣的朋友关注我的微信订阅号"小院不小",或者点击下方的二维码关注。我将多年开发中遇到的难点,以及一些有意思的功能,体会都会一一发布到我的订阅号中。需要本文demo可以在公众号中回复webpackdebug

闲来无事,采用cocos creator开发了一个小游戏,感兴趣的朋友一个可以来玩玩

有喜欢聊技术朋友也欢迎入群,若二维码失效可加我微信回复前端

调试webpack的更多相关文章
- 调试webpack配置文件
webpack运行在nodejs上,调试webpack就相当于调试nodejs程序.下面介绍一种通用的办法. 1.配置package.json,加一个debug. { 'scripts': { 'de ...
- 在visual code的debugger for chrome中调试webpack构建的项目
一直使用chrome中内置的调试器, 感觉世界那么美好, 自从学了react之后,使用visual code作为编辑器, 它提供了很多插件, 其中就包括debugger for chrome, 一款使 ...
- vscode debugger for chrome 调试webpack的配置问题
module.exports = { entry: './app.ts', output: { filename: 'bundle.js', publicPath: '/assets', devtoo ...
- vscode调试webpack的启动和打包部署过程,nodejs调试
launch.json ``` { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.micr ...
- webpack 打包调试
本文适用于已经会使用webpack的前端开发人员,但是想进一步了解webpack细节和进阶. 首先请读者按照我前一篇文章 Webpack 10分钟入门介绍的步骤,在本地搭建一个webpack的hell ...
- 单步调试理解webpack里通过require加载nodejs原生模块实现原理
在webpack和nodejs里,我们经常使用require函数加载原生模块或者开发人员自定义的模块. 原生模块的加载,比如: const path = require("path" ...
- webpack打包过程如何调试?
本文适用于已经会使用webpack的前端开发人员,但是想进一步了解webpack细节和进阶. 首先请读者按照我前一篇文章 Webpack 10分钟入门介绍的步骤,在本地搭建一个webpack的hell ...
- 真机远程调试 ( IOS Android 以及微信,weex)
1.以前cordova远程调试,Android的直接连接USB后,用chrome打开chrome://inspect网址 IOS的打开Safari的developer下. 这是因为cordova的we ...
- webpack入坑之旅(四)扬帆起航
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
随机推荐
- lcy各种要填的坑
莫比乌斯反演.FFT/NTT/FWT/FMT/ 数论容斥复习写题 概率期望复习写题 总结一下dp 看斜率优化.四边形不等式 网络流写题 字符串博客写完,写题 lh老师的课件啃完写题 考前打打正睿模拟赛
- .Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)
NetModular是什么? NetModular不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现. ...
- MongoDB系列(一):初步理解
一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 1.易用性 1)MongoDB是一款面向文档的数据库,而不是关系型数据库,因此而有着更好的扩展性. 2)通过在文档中嵌入文档和数组, ...
- BZOJ 4597: [Shoi2016]随机序列
4597: [Shoi2016]随机序列 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 255 Solved: 174[Submit][Status ...
- HDU - 1512 Monkey King
Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each ...
- 超级好用的 Java 数据可视化库:Tablesaw
本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和使用 Tablesaw 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出 ...
- JavaScript正则表达式之语法
Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...
- 网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境
对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...
- s32k144 bootloader
s32k144 bootloader升级 mcu : s32k144 can_tool : kvaser 摘要:实现can升级app程序,现在网上大多是CAN_FD升级bootloade ...
- 你不知道的Canvas(一)
Canvas基础 一.Canvas是什么 Canvas是一个可以使用脚本(通常为JavaScript来绘制图形的HTML) 元素.例如,它可以用于绘制图表.制作图片构图或者制作简单的动画,主要用来绘制 ...