Skip to content

Instantly share code, notes, and snippets.

@Salemsky
Created January 7, 2025 03:52
Show Gist options
  • Save Salemsky/96a83f55f5d4a5d50bb50d89f9fd29ce to your computer and use it in GitHub Desktop.
Save Salemsky/96a83f55f5d4a5d50bb50d89f9fd29ce to your computer and use it in GitHub Desktop.
ts-loader dynamic jsx
import { resolve } from 'node:path';
import { tsLoader } from './loaders.mjs';
/** @type {import('webpack').Configuration} */
export default {
resolve: {
extensions: ['.ts', '.tsx', '...'],
},
module: {
rules: [
{
test: /\.(m?ts|tsx)$/i,
use: tsLoader,
include: resolve(process.cwd(), 'src'),
},
],
},
};
import { resolve } from 'node:path';
import ts from 'typescript';
import { tsLoader } from './loaders.mjs';
const { JsxEmit } = ts.server.protocol;
tsLoader.options = {
...tsLoader.options,
transpileOnly: true,
};
const configDev = () => {
tsLoader.options.compilerOptions = {
sourceMap: true,
jsx: JsxEmit.ReactJSXDev,
};
return {
extends: resolve(import.meta.dirname, './config.base.mjs'),
};
};
const configProd = () => {
tsLoader.options.compilerOptions = {
jsx: JsxEmit.ReactJSX,
};
return {
extends: resolve(import.meta.dirname, './config.base.mjs'),
};
};
export default process.env.NODE_ENV === 'development' ? configDev : configProd;
/** @typedef {Record<'compilerOptions', import('typescript').server.protocol.CompilerOptions>} CompilerOptions */
/** @type {{loader: string, options: Partial<import('ts-loader').Options> | CompilerOptions}} */
export const tsLoader = {
loader: 'ts-loader',
options: {
onlyCompileBundledFiles: true,
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment