He usado js2-mode pero no sangra html en javascript correctamente. Encontré este repositorio https://github.com/jsx/jsx-mode.el pero no es para reaccionar, es para algún otro jsx.
¿Qué utiliza para editar la aplicación de reacción con archivos jsx?
He usado js2-mode pero no sangra html en javascript correctamente. Encontré este repositorio https://github.com/jsx/jsx-mode.el pero no es para reaccionar, es para algún otro jsx.
¿Qué utiliza para editar la aplicación de reacción con archivos jsx?
Respuestas:
Solución 1:
Paso 1, usa https://github.com/felipeochoa/rjsx-mode
Paso 2, instale Emacs 25+, consulte https://github.com/mooz/js2-mode/issues/291
Paso 3, Patch modo rjsx con el código a continuación
(defadvice js-jsx-indent-line (after js-jsx-indent-line-after-hack activate)
"Workaround sgml-mode and follow airbnb component style."
(save-excursion
(beginning-of-line)
(if (looking-at-p "^ +\/?> *$")
(delete-char sgml-basic-offset))))
Tenga en cuenta que todavía hay algún problema de sangría si utiliza la función de flecha en el atributo del componente. Pero esta solución funciona bien en la mayoría de los casos.
El parche sigue siendo útil para la versión estable actual rjsx-mode v0.4.0
.
El error se corrigió el 2018-8-19 en una versión inestable , consulte https://github.com/felipeochoa/rjsx-mode/pull/75 para más detalles.
La razón por la que me rjsx-mode
quedo es que hereda del modo js2, por lo que puedo usar las funciones imenu del modo js2. Es muy útil al escribir es6 javascript.
Tenga en cuenta que si usa en js2-jsx-mode
lugar de rjsx-mode
, todavía necesita mi parche.
Solución 2:
Utiliza el modo web. No uso el modo web, pero su reciente nota de lanzamiento afirma que la sangría jsx se puede manejar correctamente. Si usa el modo web, imenu del modo js2 ya no está disponible.
rjsx-mode
o eliminarlo por completo?
Por Emacs master
rama (con el tiempo Emacs 27), el apoyo JSX está ahora integrado en el modo por defecto JavaScript para Emacs, js-mode
. (¡Pruébelo! Puede construir desde la fuente o, por ejemplo, instalar una instantánea desde un PPA ).
Si se anticipa el uso de JSX, la compatibilidad con JSX se habilitará automáticamente en los buffers de JavaScript. Los criterios predeterminados son:
import React from 'react'
o var React = require('react')
aparece cerca de la parte superior del archivoPuede personalizar la estrategia de detección agregando expresiones regulares a la variable js-jsx-regexps
. Para habilitar JSX incondicionalmente, también se puede configurar js-jsx-syntax
para t en una variable de archivo / locals.el-.dir / archivo de inicio, o una llamada js-jsx-enable
en js-mode-hook
.
Una vez habilitado, JSX se resaltará y sangrará correctamente.
Los usuarios que se sintieron decepcionados con el soporte de sangría JSX disponible desde la versión 25 pueden sorprenderse gratamente al descubrir que la sangría es mucho más precisa que antes. Por ejemplo, JSX ya no necesita estar entre paréntesis para sangrarse correctamente. La sangría de código con funciones de flecha también funciona mucho mejor ahora.
Yo uso el modo web con la siguiente configuración:
(require 'web-mode)
(add-to-list 'auto-mode-alist '("\\.js\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
;; (setq web-mode-enable-auto-pairing t)
(add-hook 'web-mode-hook
(lambda ()
;; short circuit js mode and just do everything in jsx-mode
(if (equal web-mode-content-type "javascript")
(web-mode-set-content-type "jsx")
(message "now set to: %s" web-mode-content-type))))
También uso el modo web y si lo use-package
usas puedes usar este fragmento de código.
(use-package web-mode
:defer 2
:after (add-node-modules-path)
:ensure t
:mode ("\\.html?\\'"
"/themes/.*\\.php?\\'"
"/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'"
"\\.\\(handlebars\\|hbs\\)\\'")
:config (progn
(setq
web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2
web-mode-enable-auto-closing t
web-mode-enable-auto-opening t
web-mode-enable-auto-pairing t
web-mode-enable-auto-indentation t
web-mode-enable-auto-quoting t
web-mode-enable-current-column-highlight t
web-mode-enable-current-element-highlight t
web-mode-content-types-alist
'(("jsx" . "/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'")))))
Esto también agrega módulos de nodo local a su ruta para que pueda usar eslint
con flycheck
. Tenga en cuenta que esto supone que está en macOS, que debe add-node-modules-path
solucionar el mismo problema. También necesitará configurar Flycheck por separado para que linting funcione.
Si solo quieres cosas relacionadas con jsx, puedes usar esto:
(use-package web-mode
:ensure t
:mode ("/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'")
:config (progn
(setq
web-mode-content-types-alist
'(("jsx" . "/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'")))))
Esto habilitará el modo web solo en carpetas con nombres components
, containers
o src
. Si desea habilitar el modo web en cualquier archivo .js, elimine esas líneas. Si no desea que Web en modo activado en src
carpetas a continuación, quitar esa línea en la cadena tanto en :mode
y :config
.