vite-plugin-appsignal
v0.7.5
Published
The unofficial Appsignal plugin for Vite ⚡️
Downloads
1,015
Maintainers
Readme
Plugin to integrate Vite ⚡️ with Appsignal Sourcemap API
Vite plugin acts as interface to Appsignal Sourcemap API
It's a port of the vite-plugin-sentry
for Vite and therefore heavily inspired by it.
Install
NPM
npm i -D vite-plugin-appsignal
Yarn
yarn add -D vite-plugin-appsignal
PNPM
pnpm add -D vite-plugin-appsignal
Configuration
If you using Typescript - you can use ViteAppsignalPluginOptions type for better configuration experience with autocomplete.
Example config:
// vite.config.ts
// other declarations
import type { ViteAppsignalPluginOptions } from 'vite-plugin-appsignal'
import Appsignal from 'vite-plugin-appsignal'
/*
Configure appsignal plugin
*/
const appsignalConfig: ViteAppsignalPluginOptions = {
pushApiKey: '<ORGANIZATION_WIDE_APPSIGNAL_PUSH_API_KEY>',
appName: 'my_app_backend',
appId: '<APPSIGNAL_APP_ID>',
apiKey: '<APPSIGNAL_API_KEY_FOR_APP_AND_ENV>', // injected as apiKey into import.meta.env.VITE_PLUGIN_APPSIGNAL_CONFIG
personalApiToken: '<PERSONAL_APPSIGNAL_API_TOKEN>',
revision: '1.0',
env: 'production',
urlPrefix: 'https://my-app.com/assets', // Or `urlPrefixes: [...]` for multiple source files under different domains/prefixes
sourceMaps: {
include: ['./dist/assets'],
ignore: ['node_modules'],
},
}
export default defineConfig({
// other options
plugins: [Appsignal(appsignalConfig)],
build: {
// required: tells vite to create source maps
sourcemap: true,
}
})
Share config with Appsignal client library
To correctly work with Appsignal, you need to add a revision to your project.
You can expose the revision used by vite-plugin-appsignal
into your application using thge Vite feature of "virtual modules".
To do so, you need to add some lines of code:
// import virtual module
// i would recommend doing it at entry point script (e.g. main.js)
import 'virtual:vite-plugin-appsignal/appsignal-config'
import Appsignal from '@appsignal/javascript'
// now you can use this variable like so
const { revision, apiKey: key } = import.meta.env.VITE_PLUGIN_APPSIGNAL_CONFIG;
// use it in appsignal init
new Appsignal({
// other appsignal options
revision,
key,
})
// also, these settings exposed to globalThis object
// so you can get them from window object:
const revision = window.VITE_PLUGIN_APPSIGNAL_CONFIG.revision
TypeScript
To get type information for the virtual module or import meta env, you can add vite-plugin-appsignal/client
to your types
array in tsconfig.json.
{
"types": [
"vite-plugin-appsignal/client"
]
}
Also you can use reference
in your typescript code like below:
///<reference types="vite-plugin-appsignal/client"/>
FAQ
Delete generated source maps after upload
There are no built-in options to clean sourcemaps.
While i recommend to use CI, you can also use tools like rimraf in your npm scripts to drop any unnecessary files after build was complete:
// package.json
{
"scripts": {
// delete all js map files when built
"build": "vite build && rimraf dist/**/*.js.map"
}
}
List of available options
Here are the list of all plugin options:
Legend:
❌ - NOT required
⚠️ - NOT required in plugin config, but MUST be set (for example, using .appsignalclirc file)
✅ - Required
| Option | Type | Required | Default value | Description |
| -------------------- | ------------------------------------- | -------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| pushApiKey | string
| ⚠️ | | The organization-wide authentication token to use for all communication with Appsignal. |
| appName | string
| ⚠️ | | The slug of the Appsignal project associated with the app. |
| appId | string
| ⚠️ | | The app ID for this specific app and environment in Appsignal. Visible in the Appsignal Dashboard URL (directly after /sites/
) |
| personalApiToken | string
| ⚠️ | | Personal Appsignal API token. Can be retrieved here |
| debug | boolean
| ❌ | false
| Show debug messages during run |
| skipEnvironmentCheck | boolean
| ❌ | false
| By default plugin will be enabled only for production builds. Set this option to true
to skip environment checks |
| apiKey | string
| ❌ | | The API key token for this specific app and environment. Will be injected as import.meta.env.VITE_PLUGIN_APPSIGNAL_CONFIG.apiKey
|
| revision | string
| ❌ | | Unique name for revision. Defaults to short commit SHA from git (requires access to GIT and root directory to be repo) |
| env | string
| ❌ | 'production'
| Environment value for build |
| urlPrefix | string
| (✅) | | URL prefix to add to the beginning of all filenames. You might want to set this to the full URL. This is also useful if your files are stored in a sub folder. eg: url-prefix 'https://my-app.com/static/js'
. Can be overriden by setting urlPrefixes
|
| urlPrefixes | string[]
| (✅) | | URL prefixes to add to the beginning of all filenames. You might want to set this to the full URL. This is also useful if your files are stored in a sub folder. eg: url-prefix 'https://my-app.com/static/js'
. Overrides setting urlPrefix
|
| sourceMaps | AppsignalCliUploadSourceMapsOptions
| ✅ | | Sourcemaps settings, see details below |
sourceMaps
settings
With sourceMaps
you can configure how sourcemaps will be processed
| Option | Type | Required | Description |
| ------- | ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| include | string \| string[]
| ✅ | One or more paths that Appsignal CLI should scan recursively for sources. It will upload all .map
files and match associated .js
files. |
| ignore | string[]
| ❌ | Paths to ignore during upload. Overrides entries in ignoreFile
file. If neither ignoreFile
nor ignore
is present, defaults to ['node_modules']
. |
Testing
This repo uses jest
for unit-testing. Run yarn test
to run all tests.