mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-23 17:10:07 +00:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { EsbuildPlugin } from 'esbuild-loader'
|
|
import type { WebpackConfigContext } from '../utils/config'
|
|
|
|
export function esbuild (ctx: WebpackConfigContext) {
|
|
// https://esbuild.github.io/getting-started/#bundling-for-the-browser
|
|
// https://gs.statcounter.com/browser-version-market-share
|
|
// https://nodejs.org/en/
|
|
const target = ctx.isServer ? 'es2020' : 'chrome85'
|
|
|
|
// https://github.com/nuxt/nuxt/issues/13052
|
|
ctx.config.optimization!.minimizer!.push(new EsbuildPlugin())
|
|
|
|
ctx.config.module!.rules!.push(
|
|
{
|
|
test: /\.m?[jt]s$/i,
|
|
loader: 'esbuild-loader',
|
|
exclude: (file) => {
|
|
// Not exclude files outside node_modules
|
|
const lastSegment = file.split('node_modules', 2)[1]
|
|
if (!lastSegment) { return false }
|
|
|
|
return !ctx.transpile.some(module => module.test(lastSegment))
|
|
},
|
|
resolve: {
|
|
fullySpecified: false,
|
|
},
|
|
options: {
|
|
target,
|
|
...ctx.nuxt.options.webpack.loaders.esbuild,
|
|
loader: 'ts',
|
|
},
|
|
},
|
|
{
|
|
test: /\.m?[jt]sx$/,
|
|
loader: 'esbuild-loader',
|
|
options: {
|
|
target,
|
|
...ctx.nuxt.options.webpack.loaders.esbuild,
|
|
loader: 'tsx',
|
|
},
|
|
},
|
|
)
|
|
}
|