отладка vscode vue с помощью chrome и официальных рецептов vue

#vue.js #webpack #visual-studio-code #babeljs

#vue.js #веб-пакет #visual-studio-код #babeljs вавилонский

Вопрос:

Я уже несколько дней занимаюсь поиском в Интернете и решил опубликовать то, что у меня есть, в надежде найти кого-нибудь, кто сможет понять, что здесь происходит. Я попробовал и проверил результаты каждой возможной итерации sourcemappathoverrides. Похоже, это основные проблемы с рецептами отладки из vue. Они должны быть изменены для вашей структуры кода. Я также попытался изменить конфигурации в babel, webpack, babel-loader и всех внутренних файлах vscode. Прямо сейчас у меня есть это, чтобы я мог надежно переходить к точкам останова, если я отключу отладчик javascript для предварительного просмотра в vscode. Хотя это работает, требуется несколько минут (я не преувеличиваю), чтобы достичь точки останова в vscode. Пока это происходит, vscode полностью не отвечает. когда включен отладчик по умолчанию (использовать предварительный просмотр), точки останова, которые попадают в код, мгновенно попадают, но не там, где я их разместил изначально. После запуска кода вы не сможете установить точки останова во многих местах. Я знаю, что это указывает на проблему с исходной картой, но те же исходные карты отлично работают при возврате к старому отладчику javascript. Это моя текущая конфигурация.

введите описание изображения здесь

Это моя конфигурация webpack (я только недавно добавил раздел babel-loader, который не имеет никакого значения)

// webpack.config.js

 
    module.exports = {
      // ...
      entry: {
        "app": "src/main.js"
      },
      //mode: 'development',
      rules: [
        {
          test: /.m?js$/,
          exclude: /(node_modules|bower_components)/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: [
                '@vue/app'
              ]
            }
          }
        }
      ]
    };
 

Это мой файл vue.config (я безуспешно пытался изменить параметры publicpath, compress, chaingwebpackoptions)

 
    const CopyPlugin = require('copy-webpack-plugin')
    
    module.exports = {
    
      pages: {
        index: {
          entry: 'src/index.js',
          template: 'public/index.html',
          filename: 'index.html'
        }
      },
      devServer: {
        clientLogLevel: 'warning',
        hot: true,
        contentBase: 'dist',
        compress: false,
        open: true,
        overlay: { warnings: false, errors: true },
        publicPath: '/',
        quiet: true,
        watchOptions: {
          poll: false,
          //I want to be able to jump into node_modules to debug
          ignored: /node_modules/
        }
      },
      chainWebpack: config => {
        config.plugins.delete('prefetch-index'),
        config.module
          .rule('vue')
            .use('vue-loader')
              .tap(args => {
                args.compilerOptions.whitespace = 'preserve'
              })
      },
      productionSourceMap: false,
      assetsDir: './assets/',
      configureWebpack: {
        devtool: 'source-map',
        plugins: [
          new CopyPlugin({
            patterns: [
              { from: 'src/assets/img', to: 'assets/img' },
              { from: 'src/assets/logos', to: 'assets/logos' },
              { from: 'src/assets/fonts', to: 'assets/fonts' }
            ],
          }),
        ]
      }
    }
 

this is my jsonconfig (just recently commented out the webpack.config. It doesn’t matter either way)

     {
        /*"include": [
          "webpack.config.js"    
        ],*/
        "compilerOptions": {
          "sourceMap": true
        }
      }
 

my babel config (originally I had no «env» section. Adding this made no difference)

     module.exports = {
      "env":{
        "development":{
          "sourceMaps":true,
          "retainLines":true,
        }
      },
      presets: [
        '@vue/app'
      ]
    }
 

это моя конфигурация запуска (именно на нее я потратил больше всего времени. Я устал от каждой комбинации под солнцем sourcemappathoverrides и webroot с или без /src). Привязка исходной карты в журналах кажется правильной, но точки останова перескакивают с того места, где они отброшены, или вообще не могут быть установлены.

     {
        "version": "0.2.0",
      "configurations": [
        {
          "type": "chrome",
          "request": "launch",
          "trace":"verbose",
          //also right click on your chrome icon and add this to the target field (--remote-debugging-port=9222)
          "port": 9222,
          "name": "vuejs: chrome",
          "url": "http://localhost:8080",
          "webRoot": "${workspaceFolder}",
                "breakOnLoad": true,
                "sourceMapPathOverrides": {
                  "webpack:/*": "${webRoot}/*",
                  "/src/*": "${webRoot}/*",
                  "/./~/*": "${webRoot}/node_modules/*"
                },
          "preLaunchTask": "vuejs: start"
        }
      ]
      }
 

и, наконец, моя задача запустить Chrome после запуска приложения

     {
        "version": "2.0.0",
        "tasks": [
          {
            "label": "vuejs: start",
            "type": "npm",
            "script": "serve",
            "isBackground": true,
            "presentation": {
              "reveal": "always",
              "panel": "shared",
            },
            "problemMatcher": {
              "owner": "typescript",
              "fileLocation": "relative",
              "pattern": {
                "regexp": "^([^\s].*)\((\d |\,\d |\d ,\d ,\d ,\d )\):\s (error|warning|info)\s (TS\d )\s*:\s*(.*)$",
                "file": 1,
                "location": 2,
                "severity": 3,
                "code": 4,
                "message": 5
              },
              "background": {
                "activeOnStart": true,
                "beginsPattern": ".",
                "endsPattern": "App running at",
              }
          }
    
          }
          
        ]
    }