Чи існує форматор JSX для піднесеного тексту?


91

Я використовую Sublime Text як текстовий редактор.

Існує jsFormat для форматування файлів javascript, але я не можу знайти його для JSX.

Як ви, хлопці, маєте справу з форматуванням JSX?


Так, шукайте пакет jsx textmate, який можна використовувати практично з будь-яким редактором.
Brigand

здається, це лише синтаксичний підсвічувач, я шукаю форматор, який робить ідентичність та подібні речі
фін

2
Я не знаю жодного. Гугл-група з реакцією буде кращим місцем для запитання.
Brigand

не можу знайти хорошого рішення. В даний час можна проаналізувати джерело за допомогою esprima-fb і використовувати escodegen-jsx для створення відформатованого виводу. Параметри форматування обмежені, і ви втрачаєте білі рядки ... плюс escodegen-jsx - це форк без відстеження проблем .. не впевнений, чи буде він активно підтримуватися. Цікаво, як fb має справу зі своєю базою коду jsx.
user1600124

бета-версія esformatter, здається, має певну здатність форматувати JSX, оскільки вона використовує esprima-fb, але все ще не готова до виробництва
фін

Відповіді:


60

Оновлення 4

Перевірте гарніший , не такий конфігуруваний як esformatter, але в даний час використовується для форматування деяких великих проектів ( наприклад, сам React )

Оновлення 3

Перевірте піднесений jsfmt . Якщо ви додасте esformatter-jsx до конфігурації та встановите пакет всередині фордера для sublime-jsfmt. Ви зможете форматувати файли JSX безпосередньо з Sublime. Ось посібник для цього

Оновлення 2

з командного рядка ви також можете використовувати esbeautifier . Це обгортка навколо esformatter, яка приймає список глобусів для форматування

# install the dependencies globally
npm i -g esbeautifier

# beautify the files under src/ and specs/ both .js and .jsx
esbeautifier src/**/*.js* specs/**/*.js*

Оновлення

Тож я закінчив робити плагін для esformatter, щоб увімкнути форматування файлів JSX:

https://www.npmjs.com/package/esformatter-jsx

Ось демо в реальному часі на requirebin

Це повинно бути якось доцільно викликати esformatter з Sublime, передаючи поточний файл як аргумент. У будь-якому випадку, щоб використовувати його з командного рядка, ви можете слідувати таким інструкціям:

З командного рядка його можна використовувати так:

# install the dependencies globally
npm i -g esformatter esformatter-jsx

# call it (this will print to stdout)
esformatter --plugins=esformatter-jsx ./path/to/your/file

# to actually modify the file
esformatter --plugins=esformatter-jsx ./path/to/your/file > ./path/to/your/file

# to specify a config file (where you can also specify the plugins)
# check esformatter for more info about the configuration options
esformatter -c ./path/to/.esformatter ./path/to/your/file > ./path/to/your/file

==== стара відповідь нижче ===

Отже, якщо те, що ви шукаєте, просто зробити ваші файли jsx відформатованими, дозволяючи jsxсинтаксис (в основному прикрашайте весь синтаксис javascript та ігноруйте jsxтеги, тобто залишайте їх як є), це те, що я роблю, використовуючиesformatter

// needed for grunt.file.expand
var grunt = require('grunt');

// use it with care, I haven't check if there
// isn't any side effect from using proxyquire to 
// inject esprima-fb into the esformatter
// but this type of dependency replacement
// seems to be very fragile... if rocambole deps change 
// this will certainly break, same is true for esformatter
// use it with care
var proxyquire = require('proxyquire');
var rocambole = proxyquire('rocambole', {
  'esprima': require('esprima-fb')
});

var esformatter = proxyquire('esformatter', {
  rocambole: rocambole
});

// path to your esformatter configuration
var cfg = grunt.file.readJSON('./esformatter.json');

// expand the files from the glob
var files = grunt.file.expand('./js/**/*.jsx');

// do the actual formatting
files.forEach(function (fIn) {
  console.log('formatting', fIn);
  var output = esformatter.format(grunt.file.read(fIn), cfg);
  grunt.file.write(fIn, output);
});

Я б насправді хотів, щоб esformatter використовував версію рокамболи, яка використовує esprima-fb замість esprima, щоб уникнути proxyquire.


1
Це працювало лише з esformatter-jsx-ignore для мене, але це досить добре. Дякую!
Джаспер

Я використовую esformatter-jsx, і він працює, як я очікував. Однак мені також довелося додати "esformatter-jsx" до "options": {"plugins": {"esformatter-jsx"}} в "Preferences> Package Settings> Sublime JSFMT> Settings - Default" у Sublime 3, щоб зробити це працює
Кума

Це чудова відповідь, я використовую цей інструмент вже деякий час, але ми перейшли на використання es6 / es7 з babel, і він більше не працює.

1
перевірте свою піднесену консоль, у mac, щоб відкрити консоль, натисніть ctrl + `ви можете відкрити квиток на реформі esformatter-jsx або в репозиторії JSFMT з помилкою, яку ви бачите в консолі
Рой Ріохас

2
симпатичніша робить роботу за мене. піднесений плагін тут github.com/jonlabelle/SublimeJsPrettier, а також він має підтримку eslint github.com/prettier/prettier#eslint . Радий, що це питання остаточно прийнято майже через 3 роки.
фін

57

У плагіні HTML-CSS-JS Prettify є параметр, який дозволяє ігнорувати синтаксис xml у файлі js / jsx. Таким чином він не псує код jsx. Налаштування: "e4x": trueу розділі "js" файлу налаштувань

Налаштування> Налаштування пакета> HTML \ CSS \ JS Prettify> Встановити налаштування Prettify

Це не працює добре, якщо у вас є самозакриваючі теги, наприклад. теги, що закінчуються на />


1
Це все ще дуже добре працює з останніми версіями babel-sublime та HTML-CSS-JS Prettify. Просто переконайтеся, що ви додали "jsx" або будь-яке розширення файлу, яке ви використовуєте, до "дозволених_файлів-розширень".
проклятий

Ця відповідь застаріла? Цього немає />в моєму коді, але він все одно не працює
Енді Дарвін,

2
гарніший (він же jsprettier) для піднесеного на сьогоднішній день найкращий !! Дивіться відповідь нижче: stackoverflow.com/a/42169688/2178112
majorBummer

20

Ви можете встановити пакет JsPrettier для Sublime 2 & 3. Це досить новий форматтер JavaScript (на момент написання цього: лютого 2017 р.). Він підтримує більшість останніх розробок, таких як: ES2017, JSX та Flow.

Швидкий старт

  1. Встановіть красивіше глобально за допомогою терміналу: $ npm install -g prettier
  2. У Sublime перейдіть до Tools -> Command Palette ... -> Package Control: Install Package, введіть слово JsPrettier, а потім виберіть його, щоб завершити встановлення.
  3. Відформатуйте файл за допомогою контекстного меню всередині редактора або прив'яжіть його до комбінації клавіш: { "keys": ["super+b"], "command": "js_prettier" }

Посилання:


1
Це, безумовно, найкраща відповідь зараз! красивіше - це бомба!
majorBummer

1
Так, справді, це працювало ідеально і для мене. Найголовніше, на що слід звернути увагу, - це "глобальна" частина.
Ionut Necula

19

Щоб додати до сказаного @Shoobah:

У плагіні HTML-CSS-JS Prettify є параметр, який дозволяє ігнорувати синтаксис xml у файлі js / jsx. Таким чином він не псує код jsx. Параметр: "e4x": true у розділі "js" файлу налаштувань

Перейдіть до: Налаштування> Налаштування пакета> HTML \ CSS \ JS Prettify> Встановити налаштування Prettify

Перейдіть до розділу "js":

Додайте "jsx" до "дозволеного_файлу_розширення", а потім змініть "e4x" на "true"


16

відповідь в Інтернеті, який завжди говорив, що ви встановили для `` e4x '' значення true, але іноді нам потрібно встановити опцію 'format_on_save_extensions', а потім додати 'jsx' у масив

змінити jsFormat.sublime-settings

{
  "e4x": true,
  "format_on_save": true,
  "format_on_save_extensions": ["js", "json", "jsx"]
}

Я зробив, як ти сказав, але це не спрацювало для мене. :(
Яш Векарія

Де знайдено "jsFormat.sublime-settings" ? так що я можу модифікувати "format_on_save_extensions": ["js", "json", "jsx"]. Найближче, що я знаходжу про розширення файлів, це:"js": { "allowed_file_extensions": ["js", "json",...]
Chris22

Ви можете знайти його тут: Налаштування> Налаштування пакета> jsFormat> Налаштування - Користувач. Хоча у мене не вийшло, все одно дивно відступає JSX :(
Ніклас,

Шукали рішення, і це вирішило мою проблему, дякую!
Аль-Маамарі Тарек,

4

За допомогою програми встановлення пакетів Sublime встановіть Babel . Тоді:

  1. Відкрийте файл .jsx.
  2. Виберіть у меню Перегляд,
  3. Потім Синтаксис -> Відкрити все з поточним розширенням як ... -> Babel -> JavaScript (Babel).

Існує також мовний пакет JSX, яким можна скористатися
TabsNotSpaces

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.