Greetigns,
I’m trying to build a Figma plugin using React and typscript, somehow I get a weird error saying
Uncaught TypeError: Cannot read properties of undefined (reading 'createElement')
even though I tried to match my configuration files with some working plugins on github.
for reference, here is my configuration files:
my tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": ["es6", "DOM"],
"strict": true,
"jsx": "react",
"typeRoots": [
"./node_modules/@types",
"./node_modules/@figma"
],
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
},
"include": [
"src",
"code.ts"
],
"exclude": [
"node_modules"
]
}
and here is webpack.config.json:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const InlineChunkHtmlPlugin = require('inline-chunk-html-plugin'); // Add this line
module.exports = {
entry: {
ui: './src/index.tsx',
code: './code.ts',
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './public/ui.html',
filename: 'ui.html',
inlineSource: '.(js)$',
chunks: ['ui'],
cache: false,
}),
new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/ui/]),
],
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000,
},
};
the code generated into the dist
directory and i see no error or warnings in my console except the “mode” property not being set.
i run the code using command "watch": "webpack --watch"
everything is being generated. the issue occurs when i try to open the plugin, that’s when i see the error message Uncaught TypeError: Cannot read properties of undefined (reading 'createElement')
inside the Figma console.
I tried to change the following format of index.tsx many times but with no good
index.tsx:
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './components/App';
import './styles/custom.css';
document.addEventListener('DOMContentLoaded', function () {
const container = document.getElementById('root');
if (container) {
const root = createRoot(container);
root.render(<App />);
} else {
console.error("Root container not found");
}
});
i use react and react-dom version ^18.3.0
what could be the issue?