0.0.3 • Published 3 years ago

peertube-plugin-quickstart-vite v0.0.3

Weekly downloads
-
License
-
Repository
-
Last release
3 years ago

PeerTube plugin Quickstart with Vite

This quickstart includes Vite bunbler configuration based on Rollup.

See basics on https://docs.joinpeertube.org/#/contribute-plugins?id=write-a-plugintheme

Lazy-loading

Sometimes we need to lazy-load a library with ES import('my-library').then(m => mo.default), so chunks will be created by Rollup.

To rename the generated chunks your need to update vite.config.js:

export default {
  build: {
    ...,
    rollupOptions: {
      output: {
        chunkFileNames: '[name].js'
      }
    }
  }
}

This way they will be paced in dist/my-library.js.

To serve them with PeerTube you need to update package.json:

{
  ...,
  "clientScripts": [
    ...,
    {
      "script": "dist/my-library.js",
      "scopes": [] // do not load it in any scope
    }
  ]
}

Build multiple client files

Vite cannot build multiple libraries at once.

The most common way is to create a specific config for each scope: vite.config.common.js, vite.config.signup.js,...

You also need to update package.json:

{
  ...,
  "scripts": {
    "build": "vite --config vite.config.common.js build; vite --config vite.config.signup.js build; ..."
  }
}

Live-reload testing

Here is a way to watch every client-side plugin changes in the runtime code and live-reload on http://localhost.

Note that for any server-side and global CSS plugin changes the only way to see these changes is to:

  • Stop PeerTube
  • Re-install the plugin
  • Re-run PeerTube

In your PeerTube directory

$ nvm use 12                    # Make sure you're using Node.js 12
$ yarn install --pure-lockfile  # Install PeerTube dependencies
$ npm run build -- --light      # Build PeerTube
$ npm run plugin:install -- \
  --plugin-path /path/to/plugin # Install plugin
$ npm start                     # Run PeerTube on http://localhost:9000

In your plugin directory

Install rollup-plugin-livereload:

$ npm i -D rollup-plugin-livereload

Update vite.config.js:

import { resolve } from 'path'
import { loadEnv } from 'vite'
import pkg from './package.json'
import livereload from 'rollup-plugin-livereload'

// npx vite build -m development - build and watch without minifying in PeerTube environment
// npx vite build -m staging - build without minifying
// npx vite build [-m production] - build and minify

export default ({ mode }) => {
  const env = loadEnv(mode, process.cwd(), 'PEERTUBE_')
  const buildPeerTubeDistPath = () => env.PEERTUBE_PATH && resolve(env.PEERTUBE_PATH, `./storage/plugins/node_modules/${pkg.name}/`)

  return {
    build: {
      outDir: resolve(buildPeerTubeDistPath() || './', 'dist'),
      watch: mode === 'development',
      minify: mode === 'production' && 'terser',
      lib: {
        entry: 'client/common-client-plugin.js',
        name: pkg.name,
        formats: ['es'],
        fileName: () => 'common-client-plugin.js'
      }
    },
    plugins: [ mode === 'development' && livereload() ]
  }
}

You need to create .env.development.local file and define:

PEERTUBE_PATH=/path/to/local/PeerTube