为电子设置vscode调试时出错:无法连接到运行时进程并且无法连接到目标

时间:2019-01-07 11:28:47

标签: webpack visual-studio-code electron

EDIT 10/1/19

我仍然无法在渲染器进程上暂停/调试,我在Vs代码上设置的断点未通过空心圆验证,并且“由于未找到生成的代码而被忽略”

EDIT 8/1/19

我已经更新了我的启动配置package.json和webpack.config.js,Error1消失了,我现在可以在启动时中断并逐步执行main.dev.js,但是我仍然有3个问题:

  1. 单步执行代码时,我在vs代码中遇到此错误
  

无法打开'init.js':找不到文件   (文件:/// e:/snsoft/xblive-web/node_modules/electron/dist/resources/electron.asar/browser/init.js)。   Image

  1. 我在main.dev.js上放置的断点与实际的断点不同。参见Expected break pointActual break point

  2. 在启动调试模式时如何直接跳至断点而不是在第一行暂停。

launch.json

      "version": "0.2.0",
      "configurations": [

        {
          "type": "node",
          "request": "launch",
          "name": "NPM",
          "runtimeExecutable":

 "npm",
      "runtimeArgs": [
        "run",
        "dev"
      ],
      "protocol": "inspector",
      "console": "integratedTerminal",
      // "port": 9229,
      "outFiles": [],
      "sourceMaps": true,
      // "stopOnEntry": true
    },
    {
      "name": "Electron: Main",
      "type": "node",
      "request": "attach",
      "port": 9229,
      "timeout": 30000
    },
    {
      "name": "Electron: Renderer",
      "type": "chrome",
      "request": "attach",
      "port": 9223,
      "webRoot": "${workspaceFolder}",
      "timeout": 30000
    }
  ],
  "compounds": [
    {
      "name": "Electron: All",
      "configurations": [
          "NPM",
          "Electron: Main",
          "Electron: Renderer"
      ]
    }
  ] 

package.json

"scripts": {
//...
"start-main-dev": "cross-env HOT=1 NODE_ENV=development electron -r babel-register --inspect-brk=9229 --remote-debugging-port=9223 ./app/main.dev.js",
//...
}

webpack.config.js

export default merge.smart(baseConfig, {
    devtool: 'source-map',
//...
})

原始帖子

我正在尝试使用VS代码设置电子应用程序的调试,该应用程序使用webpack。

我已经成功尝试了在本页(https://github.com/Microsoft/vscode-recipes/tree/master/Electron)上推荐的基本设置。但是,当我尝试将其应用到我的项目中时,它没有效果。

这是我的 launch.json ,是我从上面的链接

修改的
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Electron: Main",
      "runtimeExecutable": "npm",
      "runtimeArgs": [
        "run",
        "dev",
        "--remote-debugging-port=9223"
      ],
      "protocol": "inspector",
      "autoAttachChildProcesses": true,
      "internalConsoleOptions": "openOnFirstSessionStart",
      "console": "integratedTerminal",
      "port": 2323
    },
    {
      "name": "Electron: Renderer",
      "type": "chrome",
      "request": "attach",
      "port": 9223,
      "webRoot": "${workspaceFolder}",
      "timeout": 30000
    },
  ],
  "compounds": [
    {
      "name": "Electron: All",
      "configurations": [
          "Electron: Main",
          "Electron: Renderer"
      ]
    }
  ]
}

package.json

"scripts": {
//...
    "dev": "cross-env START_HOT=1 node -r babel-register ./internals/scripts/CheckPortInUse.js && cross-env START_HOT=1 npm run start-renderer-dev",
    "start-main-dev": "cross-env HOT=1 NODE_ENV=development electron -r babel-register ./app/main.dev.js",
    "start-renderer-dev": "cross-env NODE_ENV=development node --trace-warnings -r babel-register ./node_modules/webpack-dev-server/bin/webpack-dev-server --config webpack.config.js",
//...
}

webpack.config.js

export default merge.smart(baseConfig, {
    devtool: 'inline-source-map',

mode: 'development',

target: 'electron-renderer',

entry: [
    'react-hot-loader/patch',
    `webpack-dev-server/client?http://localhost:${port}/`,
    'webpack/hot/only-dev-server',
    path.join(__dirname, 'app/index.js')
],

output: {
    publicPath: `http://localhost:${port}/dist/`,
    filename: 'renderer.dev.js'
},

module: {
    rules: [
        {
            test: /\.jsx?$/,
            exclude: /node_modules/,
            use: {
                loader: 'babel-loader',
                options: {
                    cacheDirectory: true,
                    plugins: [
                        // Here, we include babel plugins that are only required for the
                        // renderer process. The 'transform-*' plugins must be included
                        // before react-hot-loader/babel
                        'transform-class-properties',
                        'transform-es2015-classes',
                        'react-hot-loader/babel'
                    ]
                }
            }
        },
        {
            test: /\.global\.css$/,
            use: [
                {
                    loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        sourceMap: true
                    }
                }
            ]
        },
        {

            test: /\.css$/,
            include: [
                /[\\/]node_modules[\\/].*antd/,
                /react-datepicker/,
                /video.js/
            ],
            use: [
                {
                    loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        sourceMap: true
                    }
                }
            ]
        },
        {

            test: /^((?!\.global).)*\.css$/,
            exclude: [
                /[\\/]node_modules[\\/].*antd/,
                /react-datepicker/,
                /video.js/
            ],
            use: [
                {
                    loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        modules: true,
                        sourceMap: true,
                        importLoaders: 1,
                        localIdentName: '[name]__[local]__[hash:base64:5]'
                    }
                }
            ]
        },
        // SASS support - compile all .global.scss files and pipe it to style.css
        {
            test: /\.global\.(scss|sass)$/,
            use: [
                {
                    loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        sourceMap: true
                    }
                },
                {
                    loader: 'sass-loader'
                }
            ]
        },
        // SASS support - compile all other .scss files and pipe it to style.css
        {
            test: /^((?!\.global).)*\.(scss|sass)$/,
            use: [
                {
                    loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        modules: true,
                        sourceMap: true,
                        importLoaders: 1,
                        localIdentName: '[name]__[local]__[hash:base64:5]'
                    }
                },
                {
                    loader: 'sass-loader'
                }
            ]
        },
        // WOFF Font
        {
            test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    mimetype: 'application/font-woff'
                }
            }
        },
        // WOFF2 Font
        {
            test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    mimetype: 'application/font-woff'
                }
            }
        },
        // TTF Font
        {
            test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    mimetype: 'application/octet-stream'
                }
            }
        },
        // EOT Font
        {
            test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
            use: 'file-loader'
        },
        // SVG Font
        {
            test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    mimetype: 'image/svg+xml'
                }
            }
        },
        // Common Image Formats
        {
            test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
            use: 'url-loader'
        }
    ]
},

plugins: [
    requiredByDLLConfig
        ? null
        : new webpack.DllReferencePlugin({
              context: process.cwd(),
              manifest: require(manifest),
              sourceType: 'var'
          }),

    new webpack.HotModuleReplacementPlugin({
        multiStep: true
    }),

    new webpack.NoEmitOnErrorsPlugin(),

    /**
     * Create global constants which can be configured at compile time.
     *
     * Useful for allowing different behaviour between development builds and
     * release builds
     *
     * NODE_ENV should be production so that modules do not perform certain
     * development checks
     *
     * By default, use 'development' as NODE_ENV. This can be overriden with
     * 'staging', for example, by changing the ENV variables in the npm scripts
     */
    new webpack.EnvironmentPlugin({
        NODE_ENV: 'development'
    }),

    new webpack.LoaderOptionsPlugin({
        debug: true
    }),

    new ExtractTextPlugin({
        filename: '[name].css'
    })
],

node: {
    __dirname: false,
    __filename: false
},

devServer: {
    port,
    publicPath,
    compress: true,
    noInfo: true,
    stats: 'errors-only',
    inline: true,
    lazy: false,
    hot: true,
    headers: { 'Access-Control-Allow-Origin': '*' },
    contentBase: path.join(__dirname, 'dist'),
    watchOptions: {
        aggregateTimeout: 300,
        ignored: /node_modules/,
        poll: 100
    },
    historyApiFallback: {
        verbose: true,
        disableDotRule: false
    },
    before() {
        if (process.env.START_HOT) {
            console.log('Starting Main Process...');
            spawn('npm', ['run', 'start-main-dev'], {
                shell: true,
                env: process.env,
                stdio: 'inherit'
            })
                .on('close', code => process.exit(code))
                .on('error', spawnError => console.error(spawnError));
        }
    }
}

});

我的期望:我可以使用vs代码在电子上进行调试。 实际结果:我收到两个“无法连接到运行时进程...”错误。 (请参见下面的图片)

Error1: Cannot connect to the target Error2: ECONNREFUSED

0 个答案:

没有答案