跑 npm scripts,其实有更香的方式

跑 npm scripts,其实有更香的方式

每个前端项目都有 npm scripts,我们会用 npm scripts 来组织编译、打包、lint 等任务。【相关教程推荐:nodejs视频教程】

大家可能经常会跑 npm scripts,但却对这些命令行工具是怎么实现的并不了解。

那如果想了解这些工具的实现原理,应该怎么做呢?

这就是今天的主题:调试 npm scripts。

这些命令行工具的 package.json 里都会有个 bin 字段,来声明有哪些命令:

1.png

npm install 这个包以后,就会放到 node_modules/.bin 目录下:

2.png

这样我们就可以通过 node ./node_modules/.bin/xx 来跑不同的工具了。

我们也可以用 npx 来跑,比如 npx xx,它的作用就是执行 node_modules/.bin 下的本地命令,如果没有的话会从 npm 下载然后执行。

当然,最常用的还是放到 npm scripts 里:

3.png

这样就直接 npm run xxx 跑就行了。

npm scripts 本质上还是用 node 来跑这些 script 代码,所以调试他们和调试其他 node 代码没啥区别。

也就是可以这样跑:

在 .vscode/launch.json 的调试文件里,选择 node 的 launch program:

4.png

用 node 执行 node_modules/.bin 下的文件,传入参数即可:

5.png

其实还有更简单的方式,VSCode Debugger 对 npm scripts 调试的场景做了封装,可以直接选择 npm 类型的调试配置:

6.png

直接指定运行的命令即可:

7.png

比如我们就用这个 create-react-app 创建的 react 项目来尝试下 npm scripts 的调试:

先去 node_modules/.bin 下这个文件里打个断点:

8.png

然后点击 debug 启动:

9.png

你会发现会执行 scripts 下的 start 模块:

10.png

我们再去 start 下打个断点:

代码执行到这里断住:

11.png

这个 config 就是 webpack 的配置:

12.png

再往下走,会发现启动了一个 server:

13.png

我们在 server 启动的回调函数里打个断点,看看浏览器是怎么打开的:

14.png

点击 step into 进入这个断点:

15.gif

然后单步执行,会走到这样的代码:

依次通过 osascript 来启动这些浏览器,启动失败的话,try catch 里直接忽略了:

16.png

这些浏览器 hover 上去就可以看到:

17.png

释放断点,你就会发现浏览器打开了:

18.gif

这样,我们不就梳理了一遍 react-scripts start 的流程么?

总结一下就是这样的:

根据输入的 start 命令,执行 scripts/start 模块根据配置,创建 webpack 的 Compiler 对象创建 WebpackDevServerserver 启动之后,启动浏览器打开 url打开 url 的实现就是通过 osascripts 依次尝试那些浏览器

这样调试完一遍,我们就对 npm run start 有了更深入的认识。

而且,调试的方式跑 script 和直接命令行 npm run start 没啥区别。

要说区别,唯一的区别可能就是这个:

默认调试模式下,输出的内容会在 Debug Console 面板显示:

19.png

但这个也可以改:

20.png

可以切换成 integratedTerminal,那就会输出在 terminal 了:

21.png

这样就和平时 npm run start 执行没了任何区别,而且还可以断点调试,它不香么?

我们再来看个例子,比如 vue cli 创建的 vue 项目,在 vue.config.js 里可以改 webpack 配置:

22.png

但如果你想知道默认的配置是啥呢?console.log 么?

console.log 打印大对象可不是个好主意,它是这样的:

23.png

有的同学说用 JSON.stringify,那个更难看,特别长的一串。

如果你会了调试 npm scripts 呢?

你就可以加一个 npm 类型的调试配置:

24.png

然后打个断点,debug 来跑:

25.png

啥配置都能看到,这不香么?

我举的例子只是 webpack 的,但其余的 npm scripts,比如 babel、tsc、eslint、vite 等等都是一样的调试方式。

总结

每个项目都有 npm scripts,大多数人只是用它们而不会调试它们,所以就算每天用也不知道这些工具的原理。

这些命令行工具都是在 package.json 中声明一个 bin 字段,然后 install 之后就会放到 node_modules/.bin 下。

可以 node node_modules/.bin/xx 来跑,可以 npx xx 来跑,最常用的还是 npm scripts,通过 npm run xx 来跑。

npm scripts 的调试就是 node 的调试,只不过 VSCode Debugger 做了简化,可以直接创建 npm 类型的调试配置。

把 console 配置为 integratedTerminal 之后,日志会输出到 terminal,和平时直接跑 npm run xx 就没区别了。而且还可以断点看看执行逻辑。

跑 npm scripts 之余,还可以理一下它的实现逻辑,哪里感兴趣断在哪里,这不比直接跑香么?

更多node相关知识,请访问:nodejs 教程!

以上就是跑 npm scripts,其实有更香的方式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2698313.html

(0)
上一篇 2025年3月7日 18:48:44
下一篇 2025年3月7日 07:00:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 技巧分享:优雅的获取 package.json 文件

    日常开发中我们都知道package.json是对项目或者模块包的描述,里面包含许多元信息,那么应该如何读取package.json获取里面的信息呢?发挥作用的就是咱们今天的主角——read-pkg,关键源码只有30行左右,接下来就一起细看一…

    2025年3月7日 编程技术
    200
  • 浅谈node.js的后端路由自动加载

    本文适宜人群 有一定基础的Node.js开发人员 难易程度 中等 背景 今天来谈谈node后端中路由的问题。【相关教程推荐:nodejs视频教程】 我们前端同学或者是nodejs服务端的同学,在你们使用express和koajs写接口的时候…

    2025年3月7日 编程技术
    200
  • 聊聊使用Node如何实现轻量化进程池和线程池

    I. 前言 本文论点主要面向 Node.js 开发语言 >> Show Me Code,目前代码正在 dev 分支,已完成单元测试,尚待测试所有场景。 >> 建议通读 Node.js 官方文档 -【不要阻塞事件循环】…

    2025年3月7日 编程技术
    200
  • DDos攻击是什么?node SSR服务如何防范和处理攻击?

    什么是ddos攻击?node ssr服务如何防范和处理ddos攻击?下面本篇文章带大家了解一下ddos攻击,并介绍一下node ssr服务防范和处理ddos攻击的方法,希望对大家有所帮助! 防范和处理DDos攻击是稳定性建设中比较重要的一环…

    2025年3月7日 编程技术
    200
  • 浅析Node高并发的原理

    我们先来看几个常见的说法 nodejs是单线程 + 非阻塞I/O模型nodejs适合高并发nodejs适合I/O密集型应用,不适合CPU密集型应用  【相关教程推荐:nodejs视频教程】 在具体分析这几个说法是不是、为什么之前,我们先来做…

    2025年3月7日 编程技术
    200
  • Node服务怎么进行Docker镜像化?极致优化详解

    这段时间在开发一个腾讯文档全品类通用的 HTML 动态服务,为了方便各品类接入的生成与部署,也顺应上云的趋势,考虑使用 Docker 的方式来固定服务内容,统一进行制品版本的管理。本篇文章就将我在服务 Docker 化的过程中积累起来的优化…

    2025年3月7日 编程技术
    200
  • 一文详解Node.js中的事件循环

    本篇文章带大家深度理解node中的事件循环,希望对大家有所帮助! ALL THE TIME,我们写的的大部分javascript代码都是在浏览器环境下编译运行的,因此可能我们对浏览器的事件循环机制了解比Node.JS的事件循环更深入一些,但…

    2025年3月7日
    200
  • 带你使用Node读写txt和Excel文件

    前端有时要处理一些数据(比如多语言文件内容的替换),我们不要傻乎乎地干这种重复枯燥又浪费时间的ctrl C+ ctrl V的工作,这种事情交给计算机做再合适不过了。【相关教程推荐:nodejs视频教程】 这篇文章只是简单地介绍前端如何通过N…

    2025年3月7日 编程技术
    200
  • 看看怎么使用nodejs生成二维码

    二维码在生活中无处不在,之前我也使用过java的zxing库生成过二维码,功能很强大。 但是其实nodejs上也有很多第三方库能够生成二维码。今天我们就是使用qrcode这个库来生成二维码。【相关教程推荐:nodejs视频教程】 效果展示 …

    2025年3月7日 编程技术
    200
  • 浅析node是怎么实现github第三方登录的

    node是怎么实现github第三方登录的?下面本篇文章给大家介绍一下nodejs实现github第三方登录的方法,希望对大家有所帮助! 一、详细流程 二、具体流程 1.注册应用 ①登录github,Settings=>Develop…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论