Utilities to help configure your bundler (Vite, Webpack, or Next.js) to properly resolve the jose library dependency.
Overview
logto-authkit uses the jose library for JWT operations. Some bundlers require special configuration to properly resolve this dependency. These utilities provide the necessary configuration for different build tools.
Functions
getBundlerConfig
Returns bundler-specific configuration for resolving the jose library.
getBundlerConfig(bundler?: 'vite' | 'webpack' | 'nextjs'): BundlerConfig
bundler
'vite' | 'webpack' | 'nextjs'
default:"vite"
The bundler type to generate configuration for
Returns: BundlerConfig - Configuration object specific to the bundler
viteConfig
Pre-configured settings for Vite projects.
export const viteConfig: BundlerConfig
webpackConfig
Pre-configured settings for Webpack projects.
export const webpackConfig: BundlerConfig
nextjsConfig
Pre-configured settings for Next.js projects.
export const nextjsConfig: BundlerConfig
Type Definitions
BundlerConfig
interface BundlerConfig {
optimizeDeps?: {
include: string[]
}
resolve?: {
alias: Record<string, string>
}
alias?: Record<string, string>
}
Vite-specific dependency optimization settings
resolve
{ alias: Record<string, string> }
Module resolution aliases
Alternative alias format for some bundlers
Usage Examples
Vite
Add to your vite.config.ts:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { viteConfig } from '@ouim/logto-authkit/bundler-config'
export default defineConfig({
plugins: [react()],
...viteConfig,
})
Or use the function:
import { getBundlerConfig } from '@ouim/logto-authkit/bundler-config'
const bundlerConfig = getBundlerConfig('vite')
export default defineConfig({
plugins: [react()],
optimizeDeps: bundlerConfig.optimizeDeps,
resolve: bundlerConfig.resolve,
})
Webpack
Add to your webpack.config.js:
const { webpackConfig } = require('@ouim/logto-authkit/bundler-config')
module.exports = {
// ... other webpack config
resolve: webpackConfig.resolve,
}
Next.js
Add to your next.config.js:
const { nextjsConfig } = require('@ouim/logto-authkit/bundler-config')
module.exports = {
// ... other Next.js config
webpack: (config) => {
config.resolve.alias = {
...config.resolve.alias,
...nextjsConfig.resolve.alias,
}
return config
},
}
Or in TypeScript (next.config.ts):
import type { NextConfig } from 'next'
import { nextjsConfig } from '@ouim/logto-authkit/bundler-config'
const config: NextConfig = {
webpack: (config) => {
config.resolve.alias = {
...config.resolve.alias,
...nextjsConfig.resolve?.alias,
}
return config
},
}
export default config
Custom Bundler
For other bundlers, use the getBundlerConfig function:
import { getBundlerConfig } from '@ouim/logto-authkit/bundler-config'
// Get the base jose alias
const config = getBundlerConfig() // Returns { alias: { jose: 'jose/dist/node/cjs' } }
// Apply to your custom bundler configuration
customBundler.setAlias(config.alias)
What Does This Fix?
The jose library has different builds for different environments. These configurations ensure that:
- The correct CommonJS build is used (
jose/dist/node/cjs)
- Dependencies are properly optimized for Vite
- Module resolution works correctly across different bundlers
Without this configuration, you may encounter errors like:
Cannot find module 'jose'
Error: Package subpath './jwt/verify' is not defined
- Module resolution failures during build
Configuration Details
Vite Configuration
{
optimizeDeps: {
include: ['@logto/react', '@ouim/better-logto-react'],
},
resolve: {
alias: {
jose: 'jose/dist/node/cjs',
},
},
}
Webpack/Next.js Configuration
{
resolve: {
alias: {
jose: 'jose/dist/node/cjs',
},
},
}