如何使用带有打字稿的“调试”模块

Posted

技术标签:

【中文标题】如何使用带有打字稿的“调试”模块【英文标题】:How to use the "debug" module with typescript 【发布时间】:2018-05-23 06:40:49 【问题描述】:

我有一个带有 Typescript 的 NTVS(Visual Studio 节点工具)项目。 以下语句无法编译:

import debug = require('debug')('MyApp');

语法错误是

(TS) ';'预计

两个括号之间')(' 是否可以在 TypeScript 中使用“调试”?

【问题讨论】:

使用 TS 4.0.5 尝试了此处的所有解决方案,但无法使用导入使其在 Angular 项目中工作 【参考方案1】:

从README,调试模块正在导出一个用您的模块名称(MyApp)装饰console.error的函数。我猜还有其他方法,但我使用:

import Debug from "debug";
const debug = Debug("MyApp");

// then to use
debug("Something happened");

要将所有内容打印到控制台,请使用...运行您的应用程序

$ DEBUG=* node MyApp.js

【讨论】:

import * as Debug from "debug";可以变成默认导入语句import Debug from "debug"; 我只是通过使用@AndyFaizan 的评论让它工作。 import * as Debug from "debug" 似乎不起作用(VS Code 用红色下划线)。使用 TypeScript 3。 不适用于 TS4 最新的 Angular - 我放弃了 npm 调试 - 是时候编写我自己的日志功能了【参考方案2】:

请记住,TypeScript 是 javascript 的超集,所以你仍然可以这样做:

const debug = require('debug')('my-app:my-module');

Typescript 似乎得出结论,这里的 debug 常量是“any”类型,并且您失去了所有类型安全性,但是使用像 debug 这样简单的包,我认为您会没事的...

就个人而言,我认为在每个模块中实例化调试的 2 行代码太多了,因此我继续在我的 .ts 文件中使用这一行代码。

附:我喜欢使用模块标签,因此我可以使用DEBUG=my-app:my-module,my-app:some-other-module ts-node my-app 启用仅登录某些模块或使用DEBUG=my-app:* ... 登录我的所有模块

【讨论】:

【参考方案3】:

这里的答案不适用于我使用最新版本的 Typescript。这是我在 Typescript ^3.5.3 中使用正确的导入语法的方法:

安装Debug包 Debug的Typescript类型(只有dev需要的类型)

npm install --save debug
npm install --save-dev @types/debug

然后在.ts 文件中:

import Debug from "debug";
const debug = Debug("AppName");

希望这对其他人有帮助!

【讨论】:

npm install -D --save-dev @types/debug 更好。 -D--save-dev 是完全相同的参数,-D 只是简写形式,我更喜欢 --save-dev 的简写形式,正是出于这个原因;更容易记住。 我使用脚本来运行节点应用程序。我更改了我的启动脚本“export DEBUG=* && nodemon index.ts”,有点忘了我必须重新启动才能使更改生效。如果其他人遇到同样的问题,请留在这里 不适用于 TS4 最新的 Angular - 我放弃了 npm 调试 - 是时候编写我自己的日志功能了【参考方案4】:

在typescript中调试不显示任何日志的解决方案是由于调试依赖环境变量来决定如何显示日志的原因

解决方案

确保您已安装 dotenv 及其类型定义文件

npm install dotenv && npm install -D @types/dotenv

然后在你项目的根目录下创建一个 .env 文件添加这个环境变量:

DEBUG = *

最后在您的应用程序的索引文件中。配置 dotenv 以在运行任何其他任务之前加载环境变量。

它非常重要的 dotenv 配置是在索引文件的顶部完成的,在任何其他代码行之前。

添加这两行代码

import dotenv from "dotenv";
dotenv.config();

这应该加载调试所需的 DEBUG 环境变量,以在标准输入上显示输出。

请记住,如果您只想查看在您的文件中定义的日志,而不是来自其他模块的其他日志。最好将应用程序名称定义为命名空间。这样您就可以通过上述环境变量过滤日志,即

const debug = debug("applicationName:other-more-information");

然后要单独查看调试日志,只需将 DEBUG 变量从 * 更改为 applicationName:*

DEBUG = applicationName:*

对于基于 unix 的操作系统用户,您可以尝试将这个变量直接导出到环境变量 (虽然我没有测试过这个解决方案) export DEBUG=* - 这个方法只适用于所有启动的进程在 这个 shell

【讨论】:

以上是关于如何使用带有打字稿的“调试”模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有打字稿的 vue.js 中使用 javascript 组件?

如何:通过带有打字稿的配置时模拟 axios

带有打字稿的角度材料设计

带有打字稿的VueJS单文件组件:找不到模块stuff.vue

如何在带有打字稿的反应功能组件中定义自定义道具?

带有打字稿的 Angular 5 websocket 示例