162

I have the need to insert a comment inside a vue.js file for future references, but I don't find how you do this in the docs.

I have tried //, /**/, {{-- --}}, and {# #}, but none of them seem to work.

I am using Laravel's blade. So this is the sample_file.vue:

<template>
    <div class="media">

        <like-button :post="post" v-if="post.likedByCurrentUser === false && "></like-button>  {{--I want to comment this but I get an error from the gulp watch: post.canBeLikedByCurrentUser === true--}}

        <div class="media-left">
            <a href="#">
                <img class="media-object" v-bind:src="post.user.avatar" v-bind:title="post.user.name + ' image from Gravatar'">
            </a>
        </div>
        <div class="media-body">
            <strong>{{ post.user.name }}</strong>
            <p>{{post.body}}</p>
            <p>{{post.likeCount}} {{ pluralize('like', post.likeCount) }}</p>
        </div>
    </div>
</template> 

Does anyone know how to insert a comment and / or how to comment pieces of code?

Pathros
  • 10,042
  • 20
  • 90
  • 156
  • 2
    If you're looking for multi-line commenting, the standard html comment will work: ``. But it sounds like you're looking for inline commenting? – Adam Dec 19 '16 at 18:43
  • 1
    Ahh, I forgot to try that. It is indeed `HTML` code! Thnx – Pathros Dec 19 '16 at 19:12
  • 2
    By default HTML comments are removed by vue https://vuejs.org/v2/api/#comments – Mike3355 Jan 25 '19 at 10:05
  • 5
    Vue’s templating syntax is very similar to [Handlebars](https://handlebarsjs.com/). It’s worth noting that Handlebars allows `{{! comments like this }}` and `{{!-- comments {{like this}} that can contain double-braces --}}`. These do not get rendered in the output, unlike `` which do. I tried both `{{! ... }}` and `{{!-- ... --}}` with Vue, and unfortunately they’re not supported. Would you consider adding them to your question for users who stumble upon it? – chharvey Apr 28 '20 at 02:22

11 Answers11

229

You'd want to use standard HTML comments in the <template> tag in your situation. They'll be stripped from the output as well which is nice.

<!-- Comment -->
Bill Criswell
  • 32,161
  • 7
  • 75
  • 66
44

As Bill Criswell said we can use HTML comment syntax.

<!-- Comment -->

But, It will work outside the template tag too, comment.vue

<!-- Testing comments, this will work too. -->

<template>
    <!-- This will work too -->

    <div>
        <!-- Html Comments -->
        Hello There!
    </div>
</template>

<style><style>

<!-- Commenting here -->

<script>
    // Commenting only 1 line

    /**
      * Commenting multiple lines
      * Commenting multiple lines
      */
</script>
Jackstine
  • 486
  • 4
  • 12
Vaisakh Rajagopal
  • 1,189
  • 1
  • 14
  • 23
  • 4
    This results in "Unexpected token (1:1)" with Vue 2.5.13. – Alen Siljak Dec 31 '17 at 15:54
  • 2
    I used to comment outside the supported root tags and found it to cause issues depending on the content of the comments. I wish vue supported comments outside the root tags because it's the most sensible place to create READMEs and such, but oh well. – aaaaaa Jun 20 '18 at 15:45
  • 1
    Instead of using comments outside the supported root tabs, use valid tags there. `Commenting here – David R. Jan 04 '19 at 15:35
  • worth noting that html comments also work for `` – Bogdan D Apr 26 '22 at 12:25
41

I have just tested this:

<template>
    {{ /* this is a comment */ }}
    <h1>Hello world</h1>
</template>
Fulldump
  • 783
  • 5
  • 10
  • 3
    Cool, it doesn't appear in html output. But only one-line-comments are supported with this syntax. – d9k Aug 22 '19 at 11:18
  • 6
    Unfortunately, I cannot get this to work: `Error parsing JavaScript expression: Unexpected token (1:24)` – dtk Nov 13 '20 at 17:00
  • 2
    Finally! So simple I wonder how come I never thought of it before. Now my comments don't propagate to the final HTML. Thank you! @d9k, I don't see that. I have a multiline comment, precisely with links to SO answers — and including this very answer! — and it works great with the `{{ /**/}}` syntax. If, on the other hand, you go with `//` comments, which are single-line in JS, you'll have trouble with line breaks. – Ricardo Jun 10 '21 at 09:23
25

I noticed that you can't comment when you are inside a tag:

<!-- make sure it is outside a tag -->

<autocomplete
<!-- you can't place the comment out in here -->
>
</autocomplete>
Suraj Kumar
  • 5,547
  • 8
  • 20
  • 42
Juan Vaca
  • 267
  • 3
  • 5
21

If it is useful for your projects, you can put plain text above the template with no adornment. It is completely ignored when you render your component.

This is some documentation about this component
   - some
   - info
<template></template>
<script></script>
<style></style>
Rory Jarrard
  • 361
  • 2
  • 2
15

Vue Styleguidist contains best practices and shows examples of how to comment your components. https://vue-styleguidist.github.io/docs/Documenting.html#code-comments

But in General...

In the template or HTML section use HTML comments

<!-- Comment -->

In script section use Javascript comments

// Comment
/* Comment */

In style section use CSS comments

/* comment */
ScottyG
  • 3,204
  • 3
  • 32
  • 42
  • 1
    My VSCode used to know exactly which of those to use when I hit "Ctrl + /" depending on the area of the file I was working on... after messing with some React junk . Any idea where that behavior is set? – ScumSprocket Apr 08 '22 at 19:34
  • 1
    @ScumSprocket unfortunately there doesn't seem to be any easy way to configure that. The only way I've seen is to create your own VSCode extension, I did that here for Shopify Liquid comments if it helps: https://github.com/Christopher-Hayes/liquid-comments The only thing is I did it based on file extension. For your use case may not work. You might also want to see what config options Volar provides. – Chris Hayes Jul 28 '22 at 18:14
11

The following tip is not so much about commenting (as in documenting) code per se, but rather about allowing you to temporarily skip chunks of code during development.

When comments require opening and closing tags, the way that the parser matches them can be inconvenient. For instance the following

<!-- I want to comment this <!-- this --> and that --> 

will output and that -->. Similarly /* this will be commented /* and so will this */ but not this */.

My solution is to use v-if="false" to specify which blocks I want to (temporarily) skip.

<template>
<div>
    Hello
    <div v-if="false">
        Vue will not process whatever's in here.
    </div>
    World!
</div>
</template>

Note that this should not be used in replacement of proper comments to document your code. It's just a convenient way to have more control over blocks that you want to skip during the development.

Michael Ekoka
  • 19,050
  • 12
  • 78
  • 79
2

Try this

<template>
  <!-- Todo::  -->
</template>
Govar
  • 105
  • 1
  • 10
0

In Vue file / .vue use

/*-- comment in Vue file */
0

Depending on specific desired behavior, here are things that works to add comments in the template section:

  <template>
              <!-- comment incorporated in the rendered output. -->
              <aside v-if="false">Some comment that won’t be in the output result.</aside>
  </template>

Of course for the latter there is no requirement to use aside tag, and any false evaluated value can do the trick. So <i v-if="0">Some comment</i> will work just as well.

Admittedly, this is a bit convoluted, but Vue doesn’t seems to provide more straight forward options.

psychoslave
  • 2,783
  • 3
  • 27
  • 44
-5

I'm noob in Vue.js, but // should work because the code is javascript anyway. Looking in the docs I find this example. If you look the first 2 lines of javascript you will see comments with //.

example in javascript linked file:

// Full spec-compliant TodoMVC with localStorage persistence
// and hash-based routing in ~120 effective lines of JavaScript.

...
tony19
  • 125,647
  • 18
  • 229
  • 307
Juan
  • 7
  • 4