[d24f17c] | 1 | # Highlight.js
|
---|
| 2 |
|
---|
| 3 | [](https://www.npmjs.com/package/highlight.js)
|
---|
| 4 | [](https://join.slack.com/t/highlightjs/shared_invite/zt-mj0utgqp-TNFf4VQICnDnPg4zMHChFw)
|
---|
| 5 | [](https://discord.gg/M24EbU7ja9)
|
---|
| 6 | [](https://github.com/highlightjs/highlight.js/blob/main/LICENSE)
|
---|
| 7 | [](https://packagephobia.now.sh/result?p=highlight.js)
|
---|
| 8 | 
|
---|
| 9 | [](https://www.npmjs.com/package/highlight.js)
|
---|
| 10 | [](https://www.jsdelivr.com/package/gh/highlightjs/cdn-release)
|
---|
| 11 | 
|
---|
| 12 | [](https://lgtm.com/projects/g/highlightjs/highlight.js/?mode=list)
|
---|
| 13 |
|
---|
| 14 | [](https://github.com/highlightjs/highlight.js/actions?query=workflow%3A%22Node.js+CI%22)
|
---|
| 15 | [](https://github.com/highlightjs/highlight.js/issues)
|
---|
| 16 | [](https://github.com/highlightjs/highlight.js/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+welcome%22)
|
---|
| 17 | [](https://github.com/highlightjs/highlight.js/issues?q=is%3Aopen+is%3Aissue+label%3A%22beginner+friendly%22)
|
---|
| 18 | [](https://snyk.io/test/github/highlightjs/highlight.js?targetFile=package.json)
|
---|
| 19 |
|
---|
| 20 | <!-- [](https://github.com/highlightjs/highlight.js/actions?query=workflow%3A%22Node.js+CI%22) -->
|
---|
| 21 | <!-- [](https://github.com/highlightjs/highlight.js/commits/main) -->
|
---|
| 22 | <!-- [](https://www.jsdelivr.com/package/gh/highlightjs/cdn-release) -->
|
---|
| 23 | <!-- []() -->
|
---|
| 24 | <!-- [](https://bundlephobia.com/result?p=highlight.js) -->
|
---|
| 25 |
|
---|
| 26 |
|
---|
| 27 | Highlight.js is a syntax highlighter written in JavaScript. It works in
|
---|
| 28 | the browser as well as on the server. It works with pretty much any
|
---|
| 29 | markup, doesn’t depend on any framework, and has automatic language
|
---|
| 30 | detection.
|
---|
| 31 |
|
---|
| 32 | #### Upgrading to Version 10
|
---|
| 33 |
|
---|
| 34 | Version 10 is one of the biggest releases in quite some time. If you're
|
---|
| 35 | upgrading from version 9, there are some breaking changes and things you may
|
---|
| 36 | want to double check first.
|
---|
| 37 |
|
---|
| 38 | Please read [VERSION_10_UPGRADE.md](https://github.com/highlightjs/highlight.js/blob/main/VERSION_10_UPGRADE.md) for high-level summary of breaking changes and any actions you may need to take. See [VERSION_10_BREAKING_CHANGES.md](https://github.com/highlightjs/highlight.js/blob/main/VERSION_10_BREAKING_CHANGES.md) for a more detailed list and [CHANGES.md](https://github.com/highlightjs/highlight.js/blob/main/CHANGES.md) to learn what else is new.
|
---|
| 39 |
|
---|
| 40 | ##### Support for older versions
|
---|
| 41 |
|
---|
| 42 | Please see [SECURITY.md](https://github.com/highlightjs/highlight.js/blob/main/SECURITY.md) for support information.
|
---|
| 43 |
|
---|
| 44 | ## Getting Started
|
---|
| 45 |
|
---|
| 46 | The bare minimum for using highlight.js on a web page is linking to the
|
---|
| 47 | library along with one of the styles and calling [`highlightAll`][1]:
|
---|
| 48 |
|
---|
| 49 | ```html
|
---|
| 50 | <link rel="stylesheet" href="/path/to/styles/default.css">
|
---|
| 51 | <script src="/path/to/highlight.min.js"></script>
|
---|
| 52 | <script>hljs.highlightAll();</script>
|
---|
| 53 | ```
|
---|
| 54 |
|
---|
| 55 | This will find and highlight code inside of `<pre><code>` tags; it tries
|
---|
| 56 | to detect the language automatically. If automatic detection doesn’t
|
---|
| 57 | work for you, you can specify the language in the `class` attribute:
|
---|
| 58 |
|
---|
| 59 | ```html
|
---|
| 60 | <pre><code class="html">...</code></pre>
|
---|
| 61 | ```
|
---|
| 62 |
|
---|
| 63 | Classes may also be prefixed with either `language-` or `lang-`.
|
---|
| 64 |
|
---|
| 65 | ```html
|
---|
| 66 | <pre><code class="language-html">...</code></pre>
|
---|
| 67 | ```
|
---|
| 68 |
|
---|
| 69 | ### Plaintext and Disabling Highlighting
|
---|
| 70 |
|
---|
| 71 | To style arbitrary text like code, but without any highlighting, use the
|
---|
| 72 | `plaintext` class:
|
---|
| 73 |
|
---|
| 74 | ```html
|
---|
| 75 | <pre><code class="plaintext">...</code></pre>
|
---|
| 76 | ```
|
---|
| 77 |
|
---|
| 78 | To disable highlighting of a tag completely, use the `nohighlight` class:
|
---|
| 79 |
|
---|
| 80 | ```html
|
---|
| 81 | <pre><code class="nohighlight">...</code></pre>
|
---|
| 82 | ```
|
---|
| 83 |
|
---|
| 84 | ### Supported Languages
|
---|
| 85 |
|
---|
| 86 | Highlight.js supports over 180 different languages in the core library. There are also 3rd party
|
---|
| 87 | language plugins available for additional languages. You can find the full list of supported languages
|
---|
| 88 | in [SUPPORTED_LANGUAGES.md][9].
|
---|
| 89 |
|
---|
| 90 | ## Custom Scenarios
|
---|
| 91 |
|
---|
| 92 | When you need a bit more control over the initialization of
|
---|
| 93 | highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4]
|
---|
| 94 | functions. This allows you to better control *what* to highlight and *when*.
|
---|
| 95 |
|
---|
| 96 | Here’s the equivalent of calling [`highlightAll`][1] using
|
---|
| 97 | only vanilla JS:
|
---|
| 98 |
|
---|
| 99 | ```js
|
---|
| 100 | document.addEventListener('DOMContentLoaded', (event) => {
|
---|
| 101 | document.querySelectorAll('pre code').forEach((block) => {
|
---|
| 102 | hljs.highlightBlock(block);
|
---|
| 103 | });
|
---|
| 104 | });
|
---|
| 105 | ```
|
---|
| 106 |
|
---|
| 107 | Please refer to the documentation for [`configure`][4] options.
|
---|
| 108 |
|
---|
| 109 |
|
---|
| 110 | ### Using custom HTML elements for code blocks
|
---|
| 111 |
|
---|
| 112 | We strongly recommend `<pre><code>` wrapping for code blocks. It's quite
|
---|
| 113 | semantic and "just works" out of the box with zero fiddling. It is possible to
|
---|
| 114 | use other HTML elements (or combos), but you may need to pay special attention to
|
---|
| 115 | preserving linebreaks.
|
---|
| 116 |
|
---|
| 117 | Let's say your markup for code blocks uses divs:
|
---|
| 118 |
|
---|
| 119 | ```html
|
---|
| 120 | <div class='code'>...</div>
|
---|
| 121 | ```
|
---|
| 122 |
|
---|
| 123 | To highlight such blocks manually:
|
---|
| 124 |
|
---|
| 125 | ```js
|
---|
| 126 | // first, find all the div.code blocks
|
---|
| 127 | document.querySelectorAll('div.code').forEach(block => {
|
---|
| 128 | // then highlight each
|
---|
| 129 | hljs.highlightBlock(block);
|
---|
| 130 | });
|
---|
| 131 | ```
|
---|
| 132 |
|
---|
| 133 | Without using a tag that preserves linebreaks (like `pre`) you'll need some
|
---|
| 134 | additional CSS to help preserve them. You could also [pre and post-process line
|
---|
| 135 | breaks with a plug-in][brPlugin], but *we recommend using CSS*.
|
---|
| 136 |
|
---|
| 137 | [brPlugin]: https://github.com/highlightjs/highlight.js/issues/2559
|
---|
| 138 |
|
---|
| 139 | To preserve linebreaks inside a `div` using CSS:
|
---|
| 140 |
|
---|
| 141 | ```css
|
---|
| 142 | div.code {
|
---|
| 143 | white-space: pre;
|
---|
| 144 | }
|
---|
| 145 | ```
|
---|
| 146 |
|
---|
| 147 |
|
---|
| 148 | ## Using with Vue.js
|
---|
| 149 |
|
---|
| 150 | Simply register the plugin with Vue:
|
---|
| 151 |
|
---|
| 152 | ```js
|
---|
| 153 | Vue.use(hljs.vuePlugin);
|
---|
| 154 | ```
|
---|
| 155 |
|
---|
| 156 | And you'll be provided with a `highlightjs` component for use
|
---|
| 157 | in your templates:
|
---|
| 158 |
|
---|
| 159 | ```html
|
---|
| 160 | <div id="app">
|
---|
| 161 | <!-- bind to a data property named `code` -->
|
---|
| 162 | <highlightjs autodetect :code="code" />
|
---|
| 163 | <!-- or literal code works as well -->
|
---|
| 164 | <highlightjs language='javascript' code="var x = 5;" />
|
---|
| 165 | </div>
|
---|
| 166 | ```
|
---|
| 167 |
|
---|
| 168 | ## Web Workers
|
---|
| 169 |
|
---|
| 170 | You can run highlighting inside a web worker to avoid freezing the browser
|
---|
| 171 | window while dealing with very big chunks of code.
|
---|
| 172 |
|
---|
| 173 | In your main script:
|
---|
| 174 |
|
---|
| 175 | ```js
|
---|
| 176 | addEventListener('load', () => {
|
---|
| 177 | const code = document.querySelector('#code');
|
---|
| 178 | const worker = new Worker('worker.js');
|
---|
| 179 | worker.onmessage = (event) => { code.innerHTML = event.data; }
|
---|
| 180 | worker.postMessage(code.textContent);
|
---|
| 181 | });
|
---|
| 182 | ```
|
---|
| 183 |
|
---|
| 184 | In worker.js:
|
---|
| 185 |
|
---|
| 186 | ```js
|
---|
| 187 | onmessage = (event) => {
|
---|
| 188 | importScripts('<path>/highlight.min.js');
|
---|
| 189 | const result = self.hljs.highlightAuto(event.data);
|
---|
| 190 | postMessage(result.value);
|
---|
| 191 | };
|
---|
| 192 | ```
|
---|
| 193 |
|
---|
| 194 | ## Node.js
|
---|
| 195 |
|
---|
| 196 | You can use highlight.js with node to highlight content before sending it to the browser.
|
---|
| 197 | Make sure to use the `.value` property to get the formatted html.
|
---|
| 198 | For more info about the returned object refer to the [api docs](https://highlightjs.readthedocs.io/en/latest/api.html).
|
---|
| 199 |
|
---|
| 200 |
|
---|
| 201 | ```js
|
---|
| 202 | // require the highlight.js library, including all languages
|
---|
| 203 | const hljs = require('./highlight.js');
|
---|
| 204 | const highlightedCode = hljs.highlightAuto('<span>Hello World!</span>').value
|
---|
| 205 | ```
|
---|
| 206 |
|
---|
| 207 | Or for a smaller footprint... load just the languages you need.
|
---|
| 208 |
|
---|
| 209 | ```js
|
---|
| 210 | const hljs = require('highlight.js/lib/core'); // require only the core library
|
---|
| 211 | // separately require languages
|
---|
| 212 | hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml'));
|
---|
| 213 |
|
---|
| 214 | const highlightedCode = hljs.highlight('<span>Hello World!</span>', {language: 'xml'}).value
|
---|
| 215 | ```
|
---|
| 216 |
|
---|
| 217 |
|
---|
| 218 | ## ES6 Modules
|
---|
| 219 |
|
---|
| 220 | First, you'll likely install via `npm` or `yarn` -- see [Getting the Library](#getting-the-library) below.
|
---|
| 221 |
|
---|
| 222 | In your application:
|
---|
| 223 |
|
---|
| 224 | ```js
|
---|
| 225 | import hljs from 'highlight.js';
|
---|
| 226 | ```
|
---|
| 227 |
|
---|
| 228 | The default import imports all languages. Therefore it is likely to be more efficient to import only the library and the languages you need:
|
---|
| 229 |
|
---|
| 230 | ```js
|
---|
| 231 | import hljs from 'highlight.js/lib/core';
|
---|
| 232 | import javascript from 'highlight.js/lib/languages/javascript';
|
---|
| 233 | hljs.registerLanguage('javascript', javascript);
|
---|
| 234 | ```
|
---|
| 235 |
|
---|
| 236 | To set the syntax highlighting style, if your build tool processes CSS from your JavaScript entry point, you can also import the stylesheet directly as modules:
|
---|
| 237 |
|
---|
| 238 | ```js
|
---|
| 239 | import hljs from 'highlight.js/lib/core';
|
---|
| 240 | import 'highlight.js/styles/github.css';
|
---|
| 241 | ```
|
---|
| 242 |
|
---|
| 243 |
|
---|
| 244 | ## Getting the Library
|
---|
| 245 |
|
---|
| 246 | You can get highlight.js as a hosted, or custom-build, browser script or
|
---|
| 247 | as a server module. Right out of the box the browser script supports
|
---|
| 248 | both AMD and CommonJS, so if you wish you can use RequireJS or
|
---|
| 249 | Browserify without having to build from source. The server module also
|
---|
| 250 | works perfectly fine with Browserify, but there is the option to use a
|
---|
| 251 | build specific to browsers rather than something meant for a server.
|
---|
| 252 |
|
---|
| 253 |
|
---|
| 254 | **Do not link to GitHub directly.** The library is not supposed to work straight
|
---|
| 255 | from the source, it requires building. If none of the pre-packaged options
|
---|
| 256 | work for you refer to the [building documentation][6].
|
---|
| 257 |
|
---|
| 258 | **On Almond.** You need to use the optimizer to give the module a name. For
|
---|
| 259 | example:
|
---|
| 260 |
|
---|
| 261 | ```bash
|
---|
| 262 | r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js
|
---|
| 263 | ```
|
---|
| 264 |
|
---|
| 265 | ### CDN Hosted
|
---|
| 266 |
|
---|
| 267 | A prebuilt version of Highlight.js bundled with many common languages is hosted by several popular CDNs.
|
---|
| 268 | When using Highlight.js via CDN you can use Subresource Integrity for additional security. For details
|
---|
| 269 | see [DIGESTS.md](https://github.com/highlightjs/cdn-release/blob/main/DIGESTS.md).
|
---|
| 270 |
|
---|
| 271 | **cdnjs** ([link](https://cdnjs.com/libraries/highlight.js))
|
---|
| 272 |
|
---|
| 273 | ```html
|
---|
| 274 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.3/styles/default.min.css">
|
---|
| 275 | <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.3/highlight.min.js"></script>
|
---|
| 276 | <!-- and it's easy to individually load additional languages -->
|
---|
| 277 | <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.3/languages/go.min.js"></script>
|
---|
| 278 | ```
|
---|
| 279 |
|
---|
| 280 | **jsdelivr** ([link](https://www.jsdelivr.com/package/gh/highlightjs/cdn-release))
|
---|
| 281 |
|
---|
| 282 | ```html
|
---|
| 283 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.7.3/build/styles/default.min.css">
|
---|
| 284 | <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.7.3/build/highlight.min.js"></script>
|
---|
| 285 | <!-- and it's easy to individually load additional languages -->
|
---|
| 286 | <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.7.3/build/languages/go.min.js"></script>
|
---|
| 287 | ```
|
---|
| 288 |
|
---|
| 289 | **unpkg** ([link](https://unpkg.com/browse/@highlightjs/cdn-assets/))
|
---|
| 290 |
|
---|
| 291 | ```html
|
---|
| 292 | <link rel="stylesheet" href="https://unpkg.com/@highlightjs/cdn-assets@10.7.3/styles/default.min.css">
|
---|
| 293 | <script src="https://unpkg.com/@highlightjs/cdn-assets@10.7.3/highlight.min.js"></script>
|
---|
| 294 | <!-- and it's easy to individually load additional languages -->
|
---|
| 295 | <script src="https://unpkg.com/@highlightjs/cdn-assets@10.7.3/languages/go.min.js"></script>
|
---|
| 296 | ```
|
---|
| 297 |
|
---|
| 298 | **Note:** *The CDN-hosted `highlight.min.js` package doesn't bundle every language.* It would be
|
---|
| 299 | very large. You can find our list of "common" languages that we bundle by default on our [download page][5].
|
---|
| 300 |
|
---|
| 301 | ### Self Hosting
|
---|
| 302 |
|
---|
| 303 | The [download page][5] can quickly generate a custom bundle including only the languages you need.
|
---|
| 304 |
|
---|
| 305 | Alternatively, you can build a browser package from [source](#source):
|
---|
| 306 |
|
---|
| 307 | ```
|
---|
| 308 | node tools/build.js -t browser :common
|
---|
| 309 | ```
|
---|
| 310 |
|
---|
| 311 | See our [building documentation][6] for more information.
|
---|
| 312 |
|
---|
| 313 | **Note:** Building from source should always result in the smallest size builds. The website download page is optimized for speed, not size.
|
---|
| 314 |
|
---|
| 315 |
|
---|
| 316 | #### Prebuilt CDN assets
|
---|
| 317 |
|
---|
| 318 | You can also download and self-host the same assets we serve up via our own CDNs. We publish those builds to the [cdn-release](https://github.com/highlightjs/cdn-release) GitHub repository. You can easily pull individual files off the CDN endpoints with `curl`, etc; if say you only needed `highlight.min.js` and a single CSS file.
|
---|
| 319 |
|
---|
| 320 | There is also an npm package [@highlightjs/cdn-assets](https://www.npmjs.com/package/@highlightjs/cdn-assets) if pulling the assets in via `npm` or `yarn` would be easier for your build process.
|
---|
| 321 |
|
---|
| 322 |
|
---|
| 323 | ### NPM / Node.js server module
|
---|
| 324 |
|
---|
| 325 | Highlight.js can also be used on the server. The package with all supported languages can be installed from NPM or Yarn:
|
---|
| 326 |
|
---|
| 327 | ```bash
|
---|
| 328 | npm install highlight.js
|
---|
| 329 | # or
|
---|
| 330 | yarn add highlight.js
|
---|
| 331 | ```
|
---|
| 332 |
|
---|
| 333 | Alternatively, you can build it from [source](#source):
|
---|
| 334 |
|
---|
| 335 | ```bash
|
---|
| 336 | node tools/build.js -t node
|
---|
| 337 | ```
|
---|
| 338 |
|
---|
| 339 | See our [building documentation][6] for more information.
|
---|
| 340 |
|
---|
| 341 |
|
---|
| 342 | ### Source
|
---|
| 343 |
|
---|
| 344 | [Current source][10] is always available on GitHub.
|
---|
| 345 |
|
---|
| 346 |
|
---|
| 347 | ## License
|
---|
| 348 |
|
---|
| 349 | Highlight.js is released under the BSD License. See [LICENSE][7] file
|
---|
| 350 | for details.
|
---|
| 351 |
|
---|
| 352 |
|
---|
| 353 | ## Links
|
---|
| 354 |
|
---|
| 355 | The official site for the library is at <https://highlightjs.org/>.
|
---|
| 356 |
|
---|
| 357 | Further in-depth documentation for the API and other topics is at
|
---|
| 358 | <http://highlightjs.readthedocs.io/>.
|
---|
| 359 |
|
---|
| 360 | A list of the Core Team and contributors can be found in the [CONTRIBUTORS.md][8] file.
|
---|
| 361 |
|
---|
| 362 | [1]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightall
|
---|
| 363 | [2]: http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html
|
---|
| 364 | [3]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightblock-block
|
---|
| 365 | [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options
|
---|
| 366 | [5]: https://highlightjs.org/download/
|
---|
| 367 | [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html
|
---|
| 368 | [7]: https://github.com/highlightjs/highlight.js/blob/main/LICENSE
|
---|
| 369 | [8]: https://github.com/highlightjs/highlight.js/blob/main/CONTRIBUTORS.md
|
---|
| 370 | [9]: https://github.com/highlightjs/highlight.js/blob/main/SUPPORTED_LANGUAGES.md
|
---|
| 371 | [10]: https://github.com/highlightjs/
|
---|