How to use a third party JavaScript library in a Drupal theme?

In a recent project I wanted to use the Tippy.js library in the custom Drupal 8 theme I was working on. While I knew most of the things needed to do this in theory I did not know how I should do it step by step in practice.

Unfortunately, I did not find one resource which would have told me what to do. But I found several different resources with partial information and by using them I was able to figure out a working solution. Here it is:

Add the third-party JS lib to your theme.
You can use your favorite package manager / build tool or simply copy the lib into (a folder like “vendor” in) your custom theme. (You could use an external CDN as well but it is not recommended.)

Create your custom JavaScript file which configures the behavior / usage of the lib.
I built a component-based theme (using Emulsify from Four Kitchens) so I created my file in a component folder.

Add both the lib and your custom JS file separately to your theme’s libraries.yml and set the lib as a dependency of your custom JS.
You can reference the lib as dependency using your theme’s machine name and the name you use for it in the libraries file (eg. “mytheme/tippy”). Something like this:

tippy:
  js:
    vendor/tippy.all.min.js: {}

twist:
  js:
    components/_patterns/03-organisms/twist/twist.js: {}
  dependencies:
    - mytheme/tippy

Make your theme use your custom JS library. 
There are several ways to do it. I used the attach_library() function in the Twig template of my component:

{{ attach_library('mytheme/twist') }}

And that’s all. Happy Drupal theming!

2. January. 2019.Permalink