V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenqy930
V2EX  ›  Node.js

用 console.log()在控制台看不到输出

  •  
  •   chenqy930 · 2018-05-18 09:11:20 +08:00 · 18228 次点击
    这是一个创建于 2385 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近需要修改一个 node.js + webpack 实现的项目,调试时候想要看到一些输出,试用了 console.log()、debug 模块的 debug(),都看不到输出。

    项目中用到了 winston 模块做日志记录,于是我也尝试了 winston('info','something'),也没有输出,

    请问大家这会是什么原因呢?求助~~
    23 条回复    2018-05-18 17:53:26 +08:00
    wukaichao
        1
    wukaichao  
       2018-05-18 09:14:55 +08:00
    会不会还没运行到 log 的时候就已经中断了?
    noe132
        2
    noe132  
       2018-05-18 09:16:46 +08:00 via Android
    有可能 log 所在 shell 不是当前 shell 而是 node 后台 spawn 出来的,并且 stdout 没有处理
    miketeam
        3
    miketeam  
       2018-05-18 09:22:53 +08:00 via iPhone
    你 html 的头部是!html
    justicelove
        4
    justicelove  
       2018-05-18 09:29:42 +08:00
    赶紧给浏览器厂商提 BUG,肯定是浏览器的问题
    chenqy930
        5
    chenqy930  
    OP
       2018-05-18 09:35:16 +08:00
    @noe132 噢还有这个可能,那这该怎么办呢?
    chenqy930
        6
    chenqy930  
    OP
       2018-05-18 09:35:44 +08:00
    @miketeam 想在后台看输出的,应该跟 html 没有关系吧?
    chenqy930
        7
    chenqy930  
    OP
       2018-05-18 09:35:59 +08:00
    @wukaichao 应该不会
    csx163
        8
    csx163  
       2018-05-18 09:49:05 +08:00
    看一下编码,上次 gbk 的没有输出
    KeepPro
        9
    KeepPro  
       2018-05-18 09:50:48 +08:00 via Android
    有可能是 console 函数被覆盖了。
    dr490n
        10
    dr490n  
       2018-05-18 09:53:43 +08:00
    这种问题请先把 package.json 里面的 scripts 和你启动服务端的命令发出来啊?
    没有代码怎么一步步帮你定位问题呢?
    (是不是跑生产环境的配置了,有的配置里面生产环境会忽略掉 console 输出的……)
    abowloflrf
        11
    abowloflrf  
       2018-05-18 10:12:22 +08:00 via iPhone
    还有一种原因 是不是把 chrome 控制台的 log 输出级别手抖改了?需要改 default 或者把 info 勾上。
    chenqy930
        12
    chenqy930  
    OP
       2018-05-18 10:16:30 +08:00
    @dr490n
    "scripts": {
    "build:dev": "npm run clean && npm run preprocess && npm run webpack -- --watch",
    "build": "npm run clean && npm run preprocess && npm run webpack",
    "clean:dist": "npm run rimraf -- dist",
    "clean": "npm cache clean && npm run clean:dist",
    "lint": "eslint src/**/*.js",
    "node": "node",
    "preprocess": "node config/preprocess.js",
    "rimraf": "rimraf",
    "server": "node server/index.js",
    "start": "npm run build && npm run server",
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack --config webpack.config.js --progress --profile",
    "yarn": "yarn --ignore-engines"
    },


    刚注意看了一下输出,
    2018-05-18T00:47:17.942Z [INFO] config: {"env":"production","logLevel":"silly","serverPort":8080}
    2018-05-18T00:47:17.950Z [INFO] Webportal server starts on port 8080
    2018-05-18T00:47:42.867Z [WARN] Error: Page not found

    确实是在 production, 然后我在配置文件中改成了 development, 还是没有输出><
    2018-05-18T02:14:09.554Z [INFO] config: {"env":"development","logLevel":"silly","serverPort":8080}
    will0404
        13
    will0404  
       2018-05-18 10:24:29 +08:00
    楼上很多人看不到 nodejs 节点吗?跟 html 和浏览器有什么关系。

    首先这个可能性确实很多而你提供的信息太少。
    你既然提到了 webpack,莫非你 node 运行的代码是编译后的?那么有可能是编译期间 console 被去掉了,检查一下 webpack 配置吧。
    理论上后端代码不需要编译,我猜你是用了新语法所以用了 webpack+babel 吧。
    chenqy930
        14
    chenqy930  
    OP
       2018-05-18 10:55:20 +08:00
    @will0404
    1、package.json 中没有看到 babel 模块,所以应该没有用到 babel。
    2、运行前确实有个一分钟左右的编译过程,webpack 配置的话有一个文件是 webpack.common.js ,里面的模块有 entry、output、resolve、module、plugins 和 node,哪块会是跟 console 被去掉有关的呢?
    will0404
        15
    will0404  
       2018-05-18 11:12:01 +08:00
    @chenqy930 一般是用 UglifyJsPlugin 插件做这个事。

    顺便一说,js 是动态语言,你根本不需要编译,除非用到了 node 不支持的语法而且非用不可,这种情况不多。
    Solace202
        16
    Solace202  
       2018-05-18 11:26:33 +08:00
    换个浏览器试试呗,
    Solace202
        17
    Solace202  
       2018-05-18 11:29:45 +08:00
    或者 webpack 打包完后,在打包好的文件中找找你的 console 还在不在,不在说明被过滤了,自己新加上去
    lastpass
        18
    lastpass  
       2018-05-18 11:43:25 +08:00 via Android
    emmm,你可以在浏览器上打断点,然后手动输命令输出。
    Yokira
        19
    Yokira  
       2018-05-18 11:44:23 +08:00
    最快的办法就是搜索项目里面已经存在的日志输出方法,看看之前的代码是如何做 debug 的。
    还有就像楼上说的,需要看 webpack 是编译前端还是后端,如果跟后端没关系的话,就不用看 webpack 了。
    另外需要注意的是如果你在前端代码 debug,shell 里面是看不到的,需要去浏览器里面看(这个估计没人会犯)。
    使用了 winston 的话,会创建一个 logger,打印日志用这个 logger。
    还不行的话,把 build:dev 里面的 npm run preprocess 拿出去,自己单独先启动 node,然后再开 webpack,不过我感觉不是这个原因。
    YenvY
        20
    YenvY  
       2018-05-18 12:56:16 +08:00
    换成 console.warn 看一眼
    chenqy930
        21
    chenqy930  
    OP
       2018-05-18 17:47:07 +08:00
    @Yokira 怎么看 webpack 是编译前端还是后端呀.. 我就是用的 npm start...

    另外好像找不到项目用来输出其他调试信息的代码,用到 winston 模块的只在这一段,
    app.use((err, req, res, next) => {
    logger.warn('%s', err.stack);
    res.status(err.status || 500).json({
    message: err.message,
    error: config.env === 'development' ? err.stack : {}
    });
    });

    输出的信息类似于:
    2018-05-18T09:39:12.701Z [INFO] GET /view.html 304 0.330 ms - -
    2018-05-18T09:39:12.709Z [INFO] GET /styles/view.bundle.css 304 0.638 ms - -
    2018-05-18T09:39:12.709Z [INFO] GET /styles/layout.bundle.css 304 0.913 ms - -
    2018-05-18T09:39:12.710Z [INFO] GET /scripts/view.bundle.js 304 1.225 ms - -
    chenqy930
        22
    chenqy930  
    OP
       2018-05-18 17:47:34 +08:00
    @YenvY 试过了 不行><
    lululau
        23
    lululau  
       2018-05-18 17:53:26 +08:00
    用了 nodemon 之类的了吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.