I recently picked up a new project that uses React. Out of the box, my configuration doesn’t seem to be doing very well – indentation is erratic (sometimes thrown off by JSX), no lsp-rename
, and generally things are slow.
Are there any generally recommended approaches for React development with Emacs? Language server, minor modes, tree-sitter, etc? There seem to be a lot of options and modes available.
The codebase is currently JavaScript and JSX, but I’m considering Typescript and TSX down the line. Should I just default to the TypeScript tooling?
I use:
- apheleia for code formatting via prettier
- envrc for managing node versions
- add-node-modules-to-path
- js-ts-mode, typescript-ts-mode, tsx-ts-mode via treesit-auto
- eglot with tsserver
Along with something for eslint in flymake
using much of the same combo and I’m happy with it, except I’m using the vtsls LSP.
This is an LSP wrapper around TypeScript extension bundled with VSCode. All features and performance are nearly the same.
it’s pretty snappy with
(fset #'jsonrpc--log-event #'ignore)
Looks like adding
layout node
to.envrc
(direnv) would remove the need foradd-node-modules-to-path
for meadd-node-modules-to-path is broken since npm dropped support for the
npm bin
command.That’s not great. I bet the project I was using it on is quite old. In the meantime, as stated https://www.reddit.com/r/emacs/comments/1865s7b/recommended_setup_for_react_development/kb7kej1/ envrc and
layout node
seems to work for me!
webstorm
Not really doing React atm, but for node TypeScript I use
tide-mode
.Has anyone else incorporated that for React development?
emacs.zeef.com is your friend.
I had to fiddle around to make lsp work with treesitter in emacs 29, I can share my conf if you struggle to do the same
web-mode is well suited for most web dev.
I used it extensively for vue.js (html/css/typescript in the same file) and it worked well. Pretty sure it should be fine for typescript + jsx
As for the language server, it seems that typescript-language-server is the way to go (see)
Give it a try, i’m pretty sure that those two things will cover 90% of your needs