Copy Library Files

The @builder.io/partytown NPM package provides the static lib files that need to be served from your site. Since Partytown is using a service worker, these files must be served from the same origin as your site, and cannot be hosted from a CDN. Each site is different, and how the Partytown lib files are hosted depends on individual setup.

The /~partytown/ directory should serve the static files found within @builder.io/partytown/lib. The quickest way is to copy the lib directory into a public /~partytown directory within your static server. Another option would be to set up a copy task within the project’s bundler, or create a build step.

You can also use the lib config if your site must host these files from a directory other than the default /~partytown/. Please see the integration guides for more info on copying library files.

Copy Task Command

For convenience, the Partytown CLI provides a copylib task. The last argument should be the directory where the Partytown lib files should be copied too. In the example below, the lib files are copying to the directory public/~partytown, relative to the current working directory:

partytown copylib public/~partytown

This command can be used before a build script. Below is an example of copying the Partytown lib files before a Nextjs build command, using npm scripts:

{
  "scripts": {
    "build": "npm run partytown && next build",
    "partytown": "partytown copylib public/~partytown"
  }
}

Copy Task API

The same code that the partytown copylib CLI task uses, is also exposed as an API and can be imported by any NodeJS script. Below is an example of importing the @builder.io/partytown/utils API and copying the lib files to the given directory. Both examples of an ESM import or CommonJS require should work.

import { copyLibFiles } from '@builder.io/partytown/utils'; // ESM
// const { copyLibFiles } = require('@builder.io/partytown/utils'); // CommonJS

async function myBuildTask() {
  await copyLibFiles('path/to/public/~partytown');
}

Rollup

Available as of Partytown 0.3.6

Import the partytownRollup plugin from @builder.io/partytown/utils into your rollup.config.js config file. Next, add partytownRollup(opts) to the plugins option.

The Rollup plugin will copy Partytown lib directory to the given destination, which must be an absolute file path. The copying will happen at the time of the writeBundle() hook.

Below is an example of using a Rollup config to copy the Partytown lib to a dist build directory:

// rollup.config.js
import path from 'path';
import { partytownRollup } from '@builder.io/partytown/utils';

export default {
  plugins: [
    partytownRollup({
      dest: path.join(__dirname, 'dist', '~partytown'),
    }),
  ],
};

Vite

Available as of Partytown 0.3.6

Import the partytownVite plugin from @builder.io/partytown/utils into your vite.config.js config file. Next, add partytownVite(opts) to the plugins option.

The Vite plugin will copy Partytown lib directory to the given destination, which must be an absolute file path. The copying will happen at the time of the writeBundle() hook. When in dev mode, the Partytown lib files will be served using the Vite Dev Server.

Below is an example of using a Vite config to copy the Partytown lib to a dist build directory:

// vite.config.js
import path from 'path';
import { partytownVite } from '@builder.io/partytown/utils';

export default ({ command }) => ({
  build: {
    plugins: [
      partytownVite({
        dest: path.join(__dirname, 'dist', '~partytown'),
      }),
    ],
  },
});

Webpack

Below is an example of using Webpack’s copy plugin to copy the source lib directory found in the @builder.io/partytown package, to the public/~partytown/ directory:

// webpack.config.js
const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const partytown = require('@builder.io/partytown/utils');

module.exports = {
  plugins: [
    new CopyPlugin({
      patterns: [
        {
          from: partytown.libDirPath(),
          to: path.join(__dirname, "public", "~partytown"),
        },
      ],
    }),
  ],
};

Laravel Mix

Below is an example of using Mix’s copy() to copy the source lib directory found in the @builder.io/partytown package, to the public/~partytown/ directory:

// webpack.mix.js
const mix = require('laravel-mix');
const partytown = require('@builder.io/partytown/utils');

mix.copy(partytown.libDirPath(), 'public/~partytown');