How to debug vue.js SFC (Single file component) in vscode, with TypeScript and webpack 4?












0














For the example, everything seems to be working with chrome debugger extension installed.



When I tried to use:



<script lang="ts">


the source map seems just mess up. Following the instructions here, I can debug in Chrome, but not in vscode anymore.In chromeIn vscode, not the original vue file










share|improve this question



























    0














    For the example, everything seems to be working with chrome debugger extension installed.



    When I tried to use:



    <script lang="ts">


    the source map seems just mess up. Following the instructions here, I can debug in Chrome, but not in vscode anymore.In chromeIn vscode, not the original vue file










    share|improve this question

























      0












      0








      0







      For the example, everything seems to be working with chrome debugger extension installed.



      When I tried to use:



      <script lang="ts">


      the source map seems just mess up. Following the instructions here, I can debug in Chrome, but not in vscode anymore.In chromeIn vscode, not the original vue file










      share|improve this question













      For the example, everything seems to be working with chrome debugger extension installed.



      When I tried to use:



      <script lang="ts">


      the source map seems just mess up. Following the instructions here, I can debug in Chrome, but not in vscode anymore.In chromeIn vscode, not the original vue file







      vue.js visual-studio-code






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 17 '18 at 7:03









      Yiping

      361215




      361215
























          1 Answer
          1






          active

          oldest

          votes


















          0














          I used the version 3 vue-cli template with TypeScript in Vue.js Single-File-Components rather than the guide you have linked, but I had a similar problem.



          The vue-cli v.3 template ends up outputting TypeScript components' sourcemaps into a '.' folder (but all under webpack://) while the JavaScript components' sourcemaps end up in a 'src' folder. This resulted in the default sourceMapPaths working for the JavaScript SFCs but not the TypeScript SFCs. Therefore, I could set breakpoints in Chrome debugger directly, but not in the original files in VSCode for TypeScript SFCs.



          My solution was to correct the mapping via the sourceMapPathOverrides configuration (alternatively, it could be corrected by modifying the build process but this seemed like the simple approach).



          In .vscode/launch.json, you can set the appropriate mappings. The config I used ended up looking similar to the following (but you may have to adjust based on your exact setup):



          {
          "type": "chrome",
          "request": "launch",
          "name": "ChromeDebug",
          "url": "http://localhost:8080",
          "webRoot": "${workspaceFolder}",
          "breakOnLoad": true,
          "sourceMaps": true,
          "disableNetworkCache": true,
          "sourceMapPathOverrides": {
          "webpack:///*": "${webRoot}/*",
          "webpack:///./*": "${webRoot}/*",
          "webpack:///src/*": "${webRoot}/src/*"
          }
          }


          (The last sourceMapPathOverrides entry is probably redundant. Your link seems to be using a '.://' root output path rather than my 'webpack://' root and you may also need to adjust the webRoot path to wherever your source files are. Don't forget to change the url/port as well, if it differs from my example.)



          ...



          And the following is probably not related to OP's issue, but may be helpful for someone with a similar problem:



          When using TypeScript, ensure that you have "sourceMap": true in your tsconfig.json.



          If using vue-cli v.3, you may also need to add a vue.config.js file in the project root, such as the following, to change the devtool value from the default:



          module.exports = { configureWebpack: { devtool: "source-map" } };





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53349021%2fhow-to-debug-vue-js-sfc-single-file-component-in-vscode-with-typescript-and-w%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            I used the version 3 vue-cli template with TypeScript in Vue.js Single-File-Components rather than the guide you have linked, but I had a similar problem.



            The vue-cli v.3 template ends up outputting TypeScript components' sourcemaps into a '.' folder (but all under webpack://) while the JavaScript components' sourcemaps end up in a 'src' folder. This resulted in the default sourceMapPaths working for the JavaScript SFCs but not the TypeScript SFCs. Therefore, I could set breakpoints in Chrome debugger directly, but not in the original files in VSCode for TypeScript SFCs.



            My solution was to correct the mapping via the sourceMapPathOverrides configuration (alternatively, it could be corrected by modifying the build process but this seemed like the simple approach).



            In .vscode/launch.json, you can set the appropriate mappings. The config I used ended up looking similar to the following (but you may have to adjust based on your exact setup):



            {
            "type": "chrome",
            "request": "launch",
            "name": "ChromeDebug",
            "url": "http://localhost:8080",
            "webRoot": "${workspaceFolder}",
            "breakOnLoad": true,
            "sourceMaps": true,
            "disableNetworkCache": true,
            "sourceMapPathOverrides": {
            "webpack:///*": "${webRoot}/*",
            "webpack:///./*": "${webRoot}/*",
            "webpack:///src/*": "${webRoot}/src/*"
            }
            }


            (The last sourceMapPathOverrides entry is probably redundant. Your link seems to be using a '.://' root output path rather than my 'webpack://' root and you may also need to adjust the webRoot path to wherever your source files are. Don't forget to change the url/port as well, if it differs from my example.)



            ...



            And the following is probably not related to OP's issue, but may be helpful for someone with a similar problem:



            When using TypeScript, ensure that you have "sourceMap": true in your tsconfig.json.



            If using vue-cli v.3, you may also need to add a vue.config.js file in the project root, such as the following, to change the devtool value from the default:



            module.exports = { configureWebpack: { devtool: "source-map" } };





            share|improve this answer


























              0














              I used the version 3 vue-cli template with TypeScript in Vue.js Single-File-Components rather than the guide you have linked, but I had a similar problem.



              The vue-cli v.3 template ends up outputting TypeScript components' sourcemaps into a '.' folder (but all under webpack://) while the JavaScript components' sourcemaps end up in a 'src' folder. This resulted in the default sourceMapPaths working for the JavaScript SFCs but not the TypeScript SFCs. Therefore, I could set breakpoints in Chrome debugger directly, but not in the original files in VSCode for TypeScript SFCs.



              My solution was to correct the mapping via the sourceMapPathOverrides configuration (alternatively, it could be corrected by modifying the build process but this seemed like the simple approach).



              In .vscode/launch.json, you can set the appropriate mappings. The config I used ended up looking similar to the following (but you may have to adjust based on your exact setup):



              {
              "type": "chrome",
              "request": "launch",
              "name": "ChromeDebug",
              "url": "http://localhost:8080",
              "webRoot": "${workspaceFolder}",
              "breakOnLoad": true,
              "sourceMaps": true,
              "disableNetworkCache": true,
              "sourceMapPathOverrides": {
              "webpack:///*": "${webRoot}/*",
              "webpack:///./*": "${webRoot}/*",
              "webpack:///src/*": "${webRoot}/src/*"
              }
              }


              (The last sourceMapPathOverrides entry is probably redundant. Your link seems to be using a '.://' root output path rather than my 'webpack://' root and you may also need to adjust the webRoot path to wherever your source files are. Don't forget to change the url/port as well, if it differs from my example.)



              ...



              And the following is probably not related to OP's issue, but may be helpful for someone with a similar problem:



              When using TypeScript, ensure that you have "sourceMap": true in your tsconfig.json.



              If using vue-cli v.3, you may also need to add a vue.config.js file in the project root, such as the following, to change the devtool value from the default:



              module.exports = { configureWebpack: { devtool: "source-map" } };





              share|improve this answer
























                0












                0








                0






                I used the version 3 vue-cli template with TypeScript in Vue.js Single-File-Components rather than the guide you have linked, but I had a similar problem.



                The vue-cli v.3 template ends up outputting TypeScript components' sourcemaps into a '.' folder (but all under webpack://) while the JavaScript components' sourcemaps end up in a 'src' folder. This resulted in the default sourceMapPaths working for the JavaScript SFCs but not the TypeScript SFCs. Therefore, I could set breakpoints in Chrome debugger directly, but not in the original files in VSCode for TypeScript SFCs.



                My solution was to correct the mapping via the sourceMapPathOverrides configuration (alternatively, it could be corrected by modifying the build process but this seemed like the simple approach).



                In .vscode/launch.json, you can set the appropriate mappings. The config I used ended up looking similar to the following (but you may have to adjust based on your exact setup):



                {
                "type": "chrome",
                "request": "launch",
                "name": "ChromeDebug",
                "url": "http://localhost:8080",
                "webRoot": "${workspaceFolder}",
                "breakOnLoad": true,
                "sourceMaps": true,
                "disableNetworkCache": true,
                "sourceMapPathOverrides": {
                "webpack:///*": "${webRoot}/*",
                "webpack:///./*": "${webRoot}/*",
                "webpack:///src/*": "${webRoot}/src/*"
                }
                }


                (The last sourceMapPathOverrides entry is probably redundant. Your link seems to be using a '.://' root output path rather than my 'webpack://' root and you may also need to adjust the webRoot path to wherever your source files are. Don't forget to change the url/port as well, if it differs from my example.)



                ...



                And the following is probably not related to OP's issue, but may be helpful for someone with a similar problem:



                When using TypeScript, ensure that you have "sourceMap": true in your tsconfig.json.



                If using vue-cli v.3, you may also need to add a vue.config.js file in the project root, such as the following, to change the devtool value from the default:



                module.exports = { configureWebpack: { devtool: "source-map" } };





                share|improve this answer












                I used the version 3 vue-cli template with TypeScript in Vue.js Single-File-Components rather than the guide you have linked, but I had a similar problem.



                The vue-cli v.3 template ends up outputting TypeScript components' sourcemaps into a '.' folder (but all under webpack://) while the JavaScript components' sourcemaps end up in a 'src' folder. This resulted in the default sourceMapPaths working for the JavaScript SFCs but not the TypeScript SFCs. Therefore, I could set breakpoints in Chrome debugger directly, but not in the original files in VSCode for TypeScript SFCs.



                My solution was to correct the mapping via the sourceMapPathOverrides configuration (alternatively, it could be corrected by modifying the build process but this seemed like the simple approach).



                In .vscode/launch.json, you can set the appropriate mappings. The config I used ended up looking similar to the following (but you may have to adjust based on your exact setup):



                {
                "type": "chrome",
                "request": "launch",
                "name": "ChromeDebug",
                "url": "http://localhost:8080",
                "webRoot": "${workspaceFolder}",
                "breakOnLoad": true,
                "sourceMaps": true,
                "disableNetworkCache": true,
                "sourceMapPathOverrides": {
                "webpack:///*": "${webRoot}/*",
                "webpack:///./*": "${webRoot}/*",
                "webpack:///src/*": "${webRoot}/src/*"
                }
                }


                (The last sourceMapPathOverrides entry is probably redundant. Your link seems to be using a '.://' root output path rather than my 'webpack://' root and you may also need to adjust the webRoot path to wherever your source files are. Don't forget to change the url/port as well, if it differs from my example.)



                ...



                And the following is probably not related to OP's issue, but may be helpful for someone with a similar problem:



                When using TypeScript, ensure that you have "sourceMap": true in your tsconfig.json.



                If using vue-cli v.3, you may also need to add a vue.config.js file in the project root, such as the following, to change the devtool value from the default:



                module.exports = { configureWebpack: { devtool: "source-map" } };






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 7 '18 at 20:27









                Josh

                11




                11






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53349021%2fhow-to-debug-vue-js-sfc-single-file-component-in-vscode-with-typescript-and-w%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to change which sound is reproduced for terminal bell?

                    Can I use Tabulator js library in my java Spring + Thymeleaf project?

                    Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents