Olağanüstü metin için JSX formatlayıcı var mı?


91

Sublime Text'i metin düzenleyici olarak kullanıyorum.

Javascript dosyalarını biçimlendirmek için bir jsFormat var, ancak JSX için bir tane bulamıyorum.

JSX biçimlendirmeyle nasıl başa çıkıyorsunuz?


Evet, hemen hemen her editörle kullanılabilen jsx textmate paketini arayın.
Brigand

bu i idendi ve sıralama şeylerin yapar biçimlendiricisine arıyorum, hightlighter sadece sözdizimi gibi görünüyor
yüzgeç

2
Ben bilmiyorum. React google grubu sormak için daha iyi bir yer olurdu.
Brigand

iyi bir çözüm de bulamıyor. Şu anda kaynağı esprima-fb ile ayrıştırmak ve oluşturulan biçimlendirilmiş çıktı için escodegen-jsx kullanmak mümkündür. Biçimlendirme seçenekleri sınırlıdır ve beyaz çizgileri kaybedersiniz ... artı escodegen-jsx sorun takibi olmayan bir çataldır .. aktif olarak korunup korunmayacağından emin değilim. FB'nin jsx kod tabanıyla nasıl başa çıktığını merak ediyorum.
user1600124

esformatter beta verion hala üretim henüz hazır esprima-fb kullanıyor bunun nedeni JSX biçimlendirme bazı yeteneğine sahip gibi görünüyor, ama
yüzgeç

Yanıtlar:


60

Güncelleme 4

Daha güzel kontrol edin , eskformatter olarak yapılandırılamaz, ancak şu anda bazı büyük projeleri (React'in kendisi gibi ) biçimlendirmek için kullanılır

Güncelleme 3

Sublime jsfmt'yi kontrol edin . Yapılandırmaya esformatter-jsx eklerseniz ve paketi sublime-jsfmt için forlder içine yüklerseniz. JSX dosyalarını doğrudan Sublime'dan biçimlendirebileceksiniz. İşte bunun için bir rehber

Güncelleme 2

komut satırından esbeautifier'ı da kullanabilirsiniz . Biçimlendirilecek globların bir listesini kabul eden esformatter etrafında bir sarmalayıcıdır

# install the dependencies globally
npm i -g esbeautifier

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

Güncelleme

Bu yüzden , JSX dosyalarının biçimlendirmesini etkinleştirmek için esformatter için bir eklenti yaptım:

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

İşte olan requirebin canlı demo

Sublime'dan esformatter'ı mevcut dosyayı argüman olarak geçirerek çağırmak bir şekilde uygulanabilir olmalıdır . Her durumda komut satırından kullanmak için aşağıdaki talimatları uygulayabilirsiniz:

Komut satırından şu şekilde kullanılabilir:

# 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

==== aşağıdaki eski cevap ===

Yani aradığınız şey jsx dosyalarınızın jsxsözdizimine izin verirken biçimlendirilmesini sağlamaksa (temelde tüm javascript sözdizimini güzelleştirin ve jsxetiketleri yok sayın , yani onları olduğu gibi bırakın), bunu kullanarak yaptığım şey budur.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);
});

Aslında esformatter'ın proxyquire'ı önlemek için esprima yerine esprima-fb kullanan bir rocambole sürümü kullanmasını istiyorum.


1
Bu sadece benim için esformatter-jsx-ignore ile çalıştı, ancak bu yeterince iyi. Teşekkürler!
Jasper

Esformatter-jsx kullanıyorum ve beklediğim gibi çalışıyor. Ancak, Sublime 3'teki "Tercihler> Paket Ayarları> Sublime JSFMT> Ayarlar - Varsayılan" bölümünde "seçenekler": {"eklentiler": {"esformatter-jsx"}} için "esformatter-jsx" eklemem gerekiyordu. işler
Kuma

Bu harika bir cevap, bu aracı bir süredir kullanıyorum ama babel ile es6 / es7 kullanmaya geçtik ve artık çalışmıyor.

1
sublime konsolunuzu kontrol edin, mac'ta konsolu açmak için ctrl + `tuşlarına basın, konsolda gördüğünüz hatayla esformatter-jsx repo veya JSFMT repo'da bir bilet açabilirsiniz
roy riojas

2
benim için daha güzel bir iş yapıyor. sublime eklentisi burada github.com/jonlabelle/SublimeJsPrettier ve ayrıca github.com/prettier/prettier#eslint eslint desteğine sahiptir . Bu sorunun yaklaşık 3 yıl sonra nihayet kabul edilmesine sevindim.
fin

57

HTML-CSS-JS Prettify eklentisinde, js / jsx dosyasında xml sözdizimini göz ardı etmenize izin veren bir ayar vardır. Bu şekilde jsx kodunu bozmaz. Ayar şu "e4x": trueşekildedir : ayarlar dosyasının "js" bölümünde

Tercihler> Paket Ayarları> HTML \ CSS \ JS Prettify> Prettify Tercihlerini Ayarla

Kendi kendine kapanan etiketleriniz varsa, bu pek iyi çalışmaz. /> ile biten etiketler


1
Bu hala babel-sublime ve HTML-CSS-JS Prettify'ın en son sürümleriyle gerçekten iyi çalışıyor. Sadece "jsx" veya "allow_file_extensions" için kullandığınız dosya uzantısını eklediğinizden emin olun.
Damd

Bu cevap modası geçmiş mi? Yok />benim kodunda, ama yine de çalışmıyor
Andy Darwin

2
yüce için güzel (aka jsprettier) açık ara en iyisi !! Aşağıdaki yanıta bakın: stackoverflow.com/a/42169688/2178112
majorBummer

20

Sublime 2 & 3 için bir JsPrettier paketi kurabilirsiniz. Oldukça yeni bir JavaScript formatlayıcıdır (bunu yazarken: Şubat-2017). ES2017, JSX ve Flow gibi en son gelişmelerin çoğunu destekler.

Hızlı başlangıç

  1. Terminali kullanarak global olarak daha güzel yükleyin: $ npm install -g prettier
  2. Sublime'da Tools -> Command Palette ... -> Package Control: Install Package'a gidin, JsPrettier kelimesini yazın, ardından kurulumu tamamlamak için seçin.
  3. Düzenleyicinin içindeki bağlam menüsünü kullanarak dosyanızı biçimlendirin veya bir klavye kısayoluna bağlayın: { "keys": ["super+b"], "command": "js_prettier" }

Bağlantılar:


1
Bu şimdiye kadarki en iyi cevap! daha güzel da bomba!
majorBummer

1
Evet, gerçekten, bu benim için de mükemmel çalıştı. Dikkat edilmesi gereken en önemli şey "küresel" kısımdır.
Ionut Necula

19

@Shoobah'ın söylediklerine eklemek için:

HTML-CSS-JS Prettify eklentisinde, js / jsx dosyasında xml sözdizimini yok saymanıza izin veren bir ayar vardır. Bu şekilde jsx kodunu bozmaz. Ayar şu şekildedir: "e4x": ayarlar dosyasının "js" bölümünde true

Şuraya gidin: Tercihler> Paket Ayarları> HTML \ CSS \ JS Prettify> Prettify Tercihlerini Ayarla

"Js" bölümüne gidin:

"Allow_file_extension" a "jsx" ekleyin ve ardından "e4x" i "true" olarak değiştirin


16

İnternette her zaman 'e4x'i doğru olarak ayarlamanızı söyleyen cevap, ancak bazen' format_on_save_extensions 'seçeneğini belirlememiz ve ardından diziye' jsx 'eklememiz gerekir

jsFormat.sublime-ayarlarını değiştir

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

Söylediğin gibi yaptım ama benim için işe yaramadı. :(
Yash Vekaria

"JsFormat.sublime-settings" nerede bulunur? böylece değiştirebilirim "format_on_save_extensions": ["js", "json", "jsx"]. Dosya uzantılarıyla ilgili en yakın bulduğum şey:"js": { "allowed_file_extensions": ["js", "json",...]
Chris22

Burada bulabilirsiniz: Tercihler> Paket Ayarları> jsFormat> Ayarlar - Kullanıcı. Yine de benim için işe yaramadı, yine de JSX'i garip bir şekilde giriyor :(
Niclas

Bir çözüm arıyordum ve bu benim sorunumu çözdü, teşekkürler!
Al-Maamari Tareq

4

Sublime en Paket Yükleyici kullanarak yüklemek Babel . Sonra:

  1. Bir .jsx dosyası açın.
  2. Menüden Görüntüle'yi seçin,
  3. Sonra Sözdizimi -> Geçerli uzantı ile tümünü aç ... -> Babel -> JavaScript (Babel).

Kullanılabilecek bir JSX dil paketi de var
TabsNotSpaces

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.