接手过十多个别人的项目,发现不同项目对 console.log 的处理都不同,有的项目源码不保留 console.log(不是指通过构建工具移除)。有的对 console.log 进行注释,有的会对部分 console.log 保留不进行注释。
项目中的 console 太多了,想着去除所有的 console
这个插件可以做到。
npm install babel-plugin-transform-remove-console --save-dev
但是线上希望排查时能查看日志又不行了。
我们可以尝试重写 console函数。
private debug(): void {
const { location, console } = window;
const isDev = process.env.NODE_ENV === 'development';
const isDug = location.href.includes('debug');
if (!isDev && !isDug) {
for (const consoleItems in console) {
if (Reflect.has(console, consoleItems)) {
const propName = consoleItems as keyof typeof console;
window.console[propName] = (() => { }) as Function as any;
}
}
}
}
这样就可以在线上环境 url添加 debug参数实现日志查看了
在源码中处理 `console.log` 代码的方式通常依赖于项目的具体需求和开发团队的偏好。以下是一些常见的处理方式:
1. **构建工具移除**:
在开发阶段保留 `console.log` 用于调试,通过构建工具(如 Webpack、Rollup 等)在生产环境中自动移除这些日志。这通常通过配置相应的插件或 loader 来实现,例如使用 `terser-webpack-plugin` 进行代码压缩时,可以配置其移除 `console` 语句。
2. **手动注释或删除**:
在代码审查或准备发布之前,手动注释或删除不再需要的 `console.log` 语句。这种方法适用于小型项目或团队,但对于大型项目来说可能不够高效。
3. **保留部分 `console.log`**:
对于某些关键的调试信息或日志记录,可能会选择保留部分 `console.log` 语句,特别是在复杂的逻辑或性能监控方面。这些日志通常会被放置在特定的文件或模块中,并附有明确的注释说明其用途。
4. **使用更高级的日志系统**:
采用如 `log4js`、`winston` 等日志库,这些库提供了更丰富的日志级别(如 info、warn、error 等)和配置选项,允许开发者在开发、测试和生产环境中以不同的方式处理日志。
5. **环境变量控制**:
通过环境变量控制 `console.log` 的输出。例如,可以在代码中添加一个全局开关,根据当前环境(开发、测试、生产)决定是否输出日志。
不同的项目对 `console.log` 的处理方式可能有所不同,这取决于项目的规模、团队的偏好以及项目的具体需求。在接手新项目时,建议查阅项目的文档或与开发团队沟通,以了解他们是如何处理日志记录的。
问题内容: 我目前在一个项目中,其中的代码中有大约3000行的SQL字符串。 该项目是一个Java项目,但是这个问题可能适用于任何语言。 无论如何,这是我第一次见到如此糟糕的东西。该代码库是遗留的,因此我们可以突然迁移到Hibernate或类似的东西。 您该如何处理非常大的SQL字符串? 我知道这很不好,但是我不知道建议什么是最好的解决方案。 问题答案: 在我看来,将那些硬编码的值放入存储过程中,
在你的代码合并,压缩或编译后,保持客户端代码可读性和可调试性。使用Source Maps(源码映射)将源代码映射到已编译的代码。 TL;DR 使用Source Maps(源码映射)将压缩代码映射到源代码。然后,您可以在其原始源代码中读取和调试编译的代码。 仅使用能够生成Source Maps(源码映射)的预处理器。 验证您的web 服务器是否可以为Source Maps(源码映射)提供服务。 开始
在使用spoon分析Hadoop这样的大项目的源代码时,经常会出现“已经定义了xxx类型”的问题,因为不同的子项目中可能存在具有相同类名和相同包目录的Java类。 当我运行“java-cp xx spoon.launcher-I~/hadoop-0.23.3-src/-p myspoon.catchprocessor”时,出现了以下错误。 我发现在同一个子项目“Hadoop-MapReduce-P
我试图构建一个Akka流源,它通过发出API调用来接收数据(API的本质是滚动,它增量地获取结果)。为了构建这样的源码,我使用了GraphStage。 我修改了NumberSource示例,它只是一次推送一个。我所做的唯一更改是将替换为(以模拟API调用): 上面的代码不起作用。中的println语句只执行一次,不向下游推送任何内容。 这类未来来电应如何处理?谢了。
问题内容: 我多次听到Java妨碍JIT(即时)编译的情况,其可跨平台移植的字节码被JVM“解释”。但是,我真的不知道字节码是什么,以及JVM在Java语言体系结构中的实际含义。我想进一步了解他们。 问题答案: JVM(Java虚拟机)具有与真实计算机一样的指令集。给该指令集的名称是Java字节码。在Java虚拟机规范中对其进行了描述。其他语言在执行之前会被翻译成字节码,例如ruby和python
本文向大家介绍你是如何组织html代码的?相关面试题,主要包含被问及你是如何组织html代码的?时的应答技巧和注意事项,需要的朋友参考一下 按照 HTML5 语义话结构
冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并,那么过程看起来是这样的 拉取的时候,Git自动合并,并产生了一次提交。 如果Git不能够自动合并,那么会提示 这个时候我们就可以知道README.MD有冲突,需要我们手动解决,修改RE
假设我试图从使用基本身份验证/基本证书的RESTful api中提取,那么在我的程序中存储用户名和密码的最佳方式是什么?现在它只是以明文形式存在。 有没有更安全的方法? 谢啦