มีรูปแบบ JSX สำหรับข้อความประเสริฐหรือไม่?


91

ฉันใช้ Sublime Text เป็นโปรแกรมแก้ไขข้อความ

มี jsFormat สำหรับจัดรูปแบบไฟล์ javascript แต่ฉันไม่พบไฟล์สำหรับ JSX

พวกคุณจัดการกับการฟอร์แมต JSX อย่างไร?


ใช่ให้มองหาบันเดิล jsx textmate ซึ่งสามารถใช้ได้กับโปรแกรมแก้ไขใด ๆ
Brigand

ดูเหมือนว่าไวยากรณ์ hightlighter เพียงฉันกำลังมองหาการจัดรูปแบบที่ไม่ ident และการเรียงลำดับของสิ่ง
ครีบ

2
ฉันไม่รู้จักอย่างใดอย่างหนึ่ง กลุ่ม react google น่าจะถามได้ดีกว่า
Brigand

หาทางออกที่ดีไม่ได้เช่นกัน ปัจจุบันคุณสามารถแยกวิเคราะห์แหล่งที่มาด้วย esprima-fb และใช้ escodegen-jsx เพื่อสร้างเอาต์พุตที่จัดรูปแบบ ตัวเลือกการจัดรูปแบบมี จำกัด และคุณจะสูญเสียเส้นสีขาว ... บวกกับ escodegen-jsx เป็นทางแยกที่ไม่มีปัญหาในการติดตาม .. ไม่แน่ใจว่าจะได้รับการดูแลอย่างสม่ำเสมอหรือไม่ ฉันสงสัยว่า fb เกี่ยวข้องกับฐานรหัส jsx ของพวกเขาอย่างไร
user1600124

verion เบต้าของ esformatter ดูเหมือนจะมีความสามารถบางส่วนของการจัดรูปแบบ JSX สาเหตุก็ใช้ esprima-FB แต่ก็ยังไม่พร้อมที่ผลิตยัง
ครีบ

คำตอบ:


60

อัปเดต 4

ตรวจสอบที่สวยกว่าซึ่งไม่สามารถกำหนดค่าได้เป็น esformatter แต่ปัจจุบันใช้เพื่อจัดรูปแบบโครงการขนาดใหญ่บางโครงการ ( เช่น React เอง )

อัปเดต 3

ตรวจสอบประเสริฐ jsfmt หากคุณเพิ่มesformatter-jsxลงใน config และติดตั้งแพ็กเกจภายใน forlder สำหรับ sublime-jsfmt คุณจะสามารถฟอร์แมตไฟล์ JSX ได้โดยตรงจาก Sublime นี่คือคำแนะนำสำหรับสิ่งนั้น

อัปเดต 2

จากบรรทัดคำสั่งคุณยังสามารถใช้esbeautifier เป็นกระดาษห่อหุ้มรอบesformatterที่ยอมรับรายการ globs เพื่อจัดรูปแบบ

# 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 ใช้ rocambole เวอร์ชันที่ใช้ esprima-fb แทน esprima เพื่อหลีกเลี่ยง proxyquire


1
สิ่งนี้ใช้ได้กับ esformatter-jsx-ign สำหรับฉันเท่านั้น แต่นั่นก็ดีพอ ขอบคุณ!
Jasper

ฉันใช้ esformatter-jsx และทำงานได้ตามที่ฉันคาดไว้ อย่างไรก็ตามฉันยังต้องเพิ่ม "esformatter-jsx" ใน "ตัวเลือก": {"plugins": {"esformatter-jsx"}} ใน "Preferences> Package Settings> Sublime JSFMT> Settings - Default" ใน Sublime 3 เพื่อให้เป็น ผลงาน
Kuma

นี่เป็นคำตอบที่ดีฉันมีเครื่องมือที่ใช้มาระยะหนึ่งแล้ว แต่เราเปลี่ยนมาใช้ es6 / es7 กับ babel แล้วและมันใช้ไม่ได้อีกต่อไป

1
ตรวจสอบคอนโซลประเสริฐของคุณใน mac เพื่อเปิดคอนโซลกด ctrl + `คุณสามารถเปิดตั๋วบน repo esformatter-jsx หรือใน repo JSFMT ด้วยข้อผิดพลาดที่คุณเห็นในคอนโซล
roy riojas

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 Preferences

วิธีนี้ใช้ไม่ได้ผลหากคุณมีแท็กปิดตัวเองเช่น แท็กที่ลงท้ายด้วย />


1
สิ่งนี้ยังคงใช้งานได้ดีกับ babel-sublime และ HTML-CSS-JS Prettify เวอร์ชันล่าสุด ตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม "jsx" หรือนามสกุลไฟล์ใด ๆ ที่คุณใช้ใน "allow_file_extensions"
damd

คำตอบนี้ล้าสมัยหรือไม่? ไม่มี/>ในรหัสของฉัน แต่ยังใช้ไม่ได้
Andy Darwin

2
สวยกว่า (aka 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" ของไฟล์การตั้งค่า

ไปที่: Preferences> Package Settings> HTML \ CSS \ JS Prettify> Set Prettify Preferences

ไปที่ส่วน "js":

เพิ่ม "jsx" ใน "allow_file_extension" จากนั้นเปลี่ยน "e4x" เป็น "true"


16

คำตอบในอินเทอร์เน็ตที่บอกให้คุณตั้งค่า 'e4x' เป็นจริงเสมอ แต่บางครั้งเราต้องตั้งค่าตัวเลือกของ 'format_on_save_extensions' จากนั้นเพิ่ม 'jsx' ในอาร์เรย์

แก้ไข jsFormat.sublime-settings

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

ฉันทำตามที่คุณบอก แต่มันไม่ได้ผลสำหรับฉัน :(
Yash Vekaria

พบ"jsFormat.sublime-settings"ที่ไหน "format_on_save_extensions": ["js", "json", "jsx"]เพื่อที่จะสามารถปรับเปลี่ยน สิ่งที่ใกล้เคียงที่สุดที่ฉันพบเกี่ยวกับนามสกุลไฟล์คือ"js": { "allowed_file_extensions": ["js", "json",...]
61

คุณสามารถค้นหาได้ที่นี่: การตั้งค่า> การตั้งค่าแพ็คเกจ> jsFormat> การตั้งค่า - ผู้ใช้ ไม่ได้ผลสำหรับฉัน แต่ยังคงเยื้อง JSX แปลก ๆ :(
Niclas

กำลังมองหาวิธีแก้ปัญหาและสิ่งนี้ช่วยแก้ปัญหาของฉันได้ขอบคุณ!
Al-Maamari Tareq

4

ใช้ Sublime ของแพคเกจติดตั้งติดตั้งBabel จากนั้น:

  1. เปิดไฟล์. jsx
  2. เลือกดูจากเมนู
  3. จากนั้น Syntax -> เปิดทั้งหมดด้วยนามสกุลปัจจุบันเป็น ... -> Babel -> JavaScript (Babel)

นอกจากนี้ยังมีแพ็คเกจภาษา JSX ที่สามารถใช้ได้
TabsNotSpaces

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.