{"id":319,"date":"2023-01-13T05:00:00","date_gmt":"2023-01-13T13:00:00","guid":{"rendered":"https:\/\/www.angulartraining.com\/daily-newsletter\/?p=319"},"modified":"2023-01-10T15:51:51","modified_gmt":"2023-01-10T23:51:51","slug":"how-to-generate-documentation-for-angular-applications","status":"publish","type":"post","link":"https:\/\/www.angulartraining.com\/daily-newsletter\/how-to-generate-documentation-for-angular-applications\/","title":{"rendered":"How to generate documentation for Angular applications?"},"content":{"rendered":"\n<p>Documenting software is hard. Not only that, maintaining software documentation is even more complicated and often forgotten.<\/p>\n\n\n\n<p>What&#8217;s the solution, then? What about using an automated solution that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Generates documentation from code comments and does not require a Wiki or any third-party software.<\/li>\n\n\n\n<li>Generates said documentation automatically and can be part of your build process.<\/li>\n\n\n\n<li>Gives metrics and feedback to developers to encourage them to write more documentation.<\/li>\n<\/ol>\n\n\n\n<p>Such a solution exists. It&#8217;s called <a href=\"https:\/\/compodoc.app\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Compodoc<\/a>. Compodoc can generate a Javadoc-like website from all the comments written in your application (you can see an <a href=\"https:\/\/compodoc.github.io\/compodoc-demo-todomvc-angular\/overview.html\" target=\"_blank\" rel=\"noopener\" title=\"\">example of such documentation here<\/a>):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"688\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/compodoc-module-1024x688.png\" alt=\"\" class=\"wp-image-320\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/compodoc-module-1024x688.png 1024w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/compodoc-module-300x202.png 300w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/compodoc-module-768x516.png 768w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/compodoc-module.png 1070w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Compodoc can be installed  globally with npm: <\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">-g<\/span> <span class=\"hljs-keyword\">@compodoc<\/span>\/compodoc<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Or you can add it locally to a single Angular project by running the <code>ng add<\/code> schematic in your project folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">ng<\/span> <span class=\"hljs-selector-tag\">add<\/span> <span class=\"hljs-keyword\">@compodoc<\/span>\/compodoc<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Then you can <a href=\"https:\/\/compodoc.app\/guides\/installation.html\" target=\"_blank\" rel=\"noopener\" title=\"\">create a config file to decide which files to include<\/a> in the documentation (for instance, you might want to exclude test, and Compodoc is ready to run with a single command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-selector-tag\">compodoc<\/span> <span class=\"hljs-selector-tag\">-p<\/span> <span class=\"hljs-selector-tag\">tsconfig<\/span><span class=\"hljs-selector-class\">.doc<\/span><span class=\"hljs-selector-class\">.json<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The above command creates a static HTML website documenting your entire application with all modules\/components\/pipes\/directives\/services.<\/p>\n\n\n\n<p>My favorite feature is the <a href=\"https:\/\/compodoc.app\/guides\/documentation-coverage.html\" target=\"_blank\" rel=\"noopener\" title=\"\">documentation coverage statistics<\/a> that show which parts of the application are well-documented and which are not, using a report similar to test coverage reports that developers are familiar with.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Documenting software is hard. Not only that, maintaining software documentation is even more complicated and often forgotten. What&#8217;s the solution, then? What about using an automated solution that: Such a solution exists. It&#8217;s called Compodoc. Compodoc can generate a Javadoc-like website from all the comments written in your application (you can see an example of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,17],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-angular","category-tools"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/comments?post=319"}],"version-history":[{"count":3,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":323,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/319\/revisions\/323"}],"wp:attachment":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/media?parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/categories?post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/tags?post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}