调试SSR node.js服务器端VSCode

时间:2018-06-14 23:07:05

标签: node.js reactjs webpack visual-studio-code google-chrome-devtools

我在尝试调试SSR反应应用程序(服务器端)时损失了太多时间。我们正在从头开始构建应用程序,这是一个非常大的项目,因此调试代码非常重要。

服务器的webpack配置如下:

const path = require('path');
const merge = require('webpack-merge');
const webpackNodeExternals = require('webpack-node-externals');
const webpack = require('webpack');

const baseConfig = require('./app.webpack.base');

const server = {
  name: 'server',
  entry: ['./app/server/index.js'],
  target: 'node',
  mode: 'development',
  devtool: 'source-map',
  output: {
    path: path.resolve(__dirname, 'public/server'),
    filename: 'server.js',
    libraryTarget: 'commonjs2'
  },
  module: {
    rules: [
      {
        test: [/\.svg$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
        loader: 'file-loader',
        exclude: /node_modules/,
        options: {
          name: 'public/media/[name].[ext]',
          publicPath: (url) => url.replace(/public/, ''),
          emit: false
        }
      },
      {
        test: /\.scss$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'css-loader/locals'
          },
          {
            loader: 'sass-loader'
          }
        ]
      }
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      'SERVER_SIDE': true,
      'ENVIRONMENT': JSON.stringify(process.env.NODE_ENV),
    }),
    new webpack.optimize.LimitChunkCountPlugin({
      maxChunks: 1
    })
  ],
  externals: [webpackNodeExternals()]
};

module.exports = merge(baseConfig, server);

baseConfig只为js和jsx文件添加一个加载器:

  module: {
    rules: [
      {
        test: [/js$/, /\.jsx?$/],
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  },

我无法在VSCode和Chrome中调试它。

在VSCode中,我得名:

  

未验证的断点,断点已设置但尚未绑定

我正在使用node --inspect flag运行生成的server.js文件(与webpack捆绑后):

我尝试过很多launch.json配置,例如:

{
    "name": "Attach to Process",
    "type": "node",
    "protocol": "inspector",
    "request": "attach",
    "port": 9229,
    "sourceMaps": true
}

在Chrome中,如果我打开DevTools for Chrome,我可以看到源地图并设置断点,但它们永远不会被击中。

如果你能帮助我,我将非常感谢你们。任何见解或想法也值得赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以查看我的解决方案 here。顺便说一句,我对 SSR here

进行了一些实验