Có trình định dạng JSX cho văn bản siêu phàm không?


91

Tôi đang sử dụng Sublime Text làm trình soạn thảo văn bản.

Có một jsFormat để định dạng tệp javascript nhưng tôi không thể tìm thấy một cái cho JSX.

Các bạn xử lý như thế nào với định dạng JSX?


Có, hãy tìm gói textmate jsx có thể được sử dụng với khá nhiều trình soạn thảo.
Brigand

nó có vẻ như một cú pháp hightlighter chỉ, tôi đang tìm kiếm các định dạng mà không ident và sắp xếp thứ
vây

2
Tôi không biết một. Nhóm phản ứng của google sẽ là nơi tốt hơn để hỏi.
Brigand

cũng không tìm được giải pháp tốt. Hiện tại, có thể phân tích cú pháp nguồn bằng esprima-fb và sử dụng escodegen-jsx để tạo đầu ra có định dạng. Các tùy chọn định dạng bị hạn chế và bạn sẽ mất các dòng trắng ... cộng với escodegen-jsx là một nhánh không có theo dõi vấn đề .. không chắc liệu nó có được duy trì tích cực hay không. Tôi tự hỏi làm thế nào fb giao dịch với cơ sở mã jsx của họ.
user1600124

các verion beta của esformatter dường như có một số khả năng định dạng JSX gây ra nó sử dụng esprima-fb, nhưng vẫn không sản xuất sẵn sàng chưa
vây

Câu trả lời:


60

Cập nhật 4

Kiểm tra đẹp hơn , không phải có thể định cấu hình như esformatter, nhưng hiện được sử dụng để định dạng một số dự án lớn ( như chính React )

Cập nhật 3

Kiểm tra jsfmt siêu phàm . Nếu bạn thêm esformatter-jsx vào cấu hình và cài đặt gói bên trong forlder for sublime-jsfmt. Bạn sẽ có thể định dạng tệp JSX trực tiếp từ Sublime. Đây là hướng dẫn cho điều đó

Cập nhật 2

từ dòng lệnh, bạn cũng có thể sử dụng esbeautifier . Nó là một trình bao bọc xung quanh esformatter chấp nhận một danh sách các quả địa cầu để định dạng

# install the dependencies globally
npm i -g esbeautifier

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

Cập nhật

Vì vậy, tôi đã kết thúc việc tạo một plugin cho esformatter để cho phép định dạng tệp JSX:

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

Đây là bản demo trực tiếp trên requestbin

Sẽ khả thi bằng cách nào đó khi gọi esformatter từ Sublime truyền tệp hiện tại làm đối số. Trong mọi trường hợp để sử dụng nó từ dòng lệnh, bạn có thể làm theo các hướng dẫn sau:

Từ dòng lệnh, nó có thể được sử dụng như sau:

# 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

==== câu trả lời cũ bên dưới ===

Vì vậy, nếu những gì bạn đang tìm chỉ là làm cho các tệp jsx của bạn được định dạng trong khi vẫn cho phép jsxcú pháp (về cơ bản làm đẹp tất cả các cú pháp javascript và bỏ qua jsxcác thẻ, nghĩa là giữ nguyên chúng), thì đây là những gì tôi đang làmesformatter

// 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);
});

Tôi thực sự muốn esformatter đó sử dụng phiên bản rocambole sử dụng esprima-fb thay vì esprima, để tránh proxyquire.


1
Điều này chỉ hoạt động với esformatter-jsx-ignore đối với tôi, nhưng điều đó là đủ tốt. Cảm ơn!
Jasper

Tôi đang sử dụng esformatter-jsx và Nó hoạt động như tôi mong đợi. Tuy nhiên, tôi cũng phải thêm "esformatter-jsx" vào "options": {"plugins": {"esformatter-jsx"}} trong "Preferences> Package Settings> Sublime JSFMT> Settings - Default" trong Sublime 3 để thực hiện hoạt động
Kuma

Đây là một câu trả lời tuyệt vời, tôi đã sử dụng công cụ này một thời gian, nhưng chúng tôi đã chuyển sang sử dụng es6 / es7 với babel và nó không hoạt động nữa.

1
kiểm tra giao diện điều khiển tuyệt vời của bạn, trong mac để mở giao diện điều khiển nhấn ctrl + `bạn có thể mở một vé trên repo esformatter-jsx hoặc trong JSFMT repo với lỗi bạn đang nhìn thấy trong giao diện điều khiển
roy riojas

2
đẹp hơn làm công việc cho tôi. plugin sublime tại đây github.com/jonlabelle/SublimeJsPrettier và nó cũng có hỗ trợ eslint github.com/prettier/prettier#eslint . Rất vui vì câu hỏi này cuối cùng cũng được chấp nhận sau gần 3 năm.
fin.

57

Có một cài đặt trong plugin HTML-CSS-JS Prettify cho phép bạn bỏ qua cú pháp xml trong tệp js / jsx. Bằng cách đó, nó không làm rối mã jsx. Cài đặt là: "e4x": truetrong phần "js" của tệp cài đặt

Tùy chọn> Cài đặt gói> HTML \ CSS \ JS Chỉnh sửa trước> Đặt tùy chọn chỉnh sửa trước

Điều này không hoạt động tốt nếu bạn có thẻ tự đóng ví dụ. thẻ kết thúc bằng />


1
Điều này vẫn hoạt động thực sự tốt với các phiên bản mới nhất của babel-sublime và HTML-CSS-JS Prettify. Chỉ cần đảm bảo rằng bạn thêm "jsx" hoặc bất kỳ phần mở rộng tệp nào bạn sử dụng vào "allow_file_extensions".
chết tiệt

Câu trả lời này có lỗi thời không? Không có />trong mã của tôi, nhưng nó vẫn không hoạt động
Andy Darwin

2
đẹp hơn (hay còn gọi là jsprettier) cho siêu phàm là tốt nhất !! Xem câu trả lời bên dưới: stackoverflow.com/a/42169688/2178112
majorBummer

20

Bạn có thể cài đặt gói JsPrettier cho Sublime 2 & 3. Đây là một trình định dạng JavaScript khá mới (tại thời điểm viết bài này: tháng 2 năm 2017). Nó hỗ trợ hầu hết các phát triển mới nhất như: ES2017, JSX và Flow.

Bắt đầu nhanh

  1. Cài đặt đẹp hơn trên toàn cầu bằng cách sử dụng thiết bị đầu cuối: $ npm install -g prettier
  2. Trong Sublime, vào Tools -> Command Palette ... -> Package Control: Install Package, gõ từ JsPrettier, sau đó chọn nó để hoàn tất cài đặt.
  3. Định dạng tệp của bạn bằng menu ngữ cảnh bên trong trình chỉnh sửa hoặc liên kết tệp với phím tắt: { "keys": ["super+b"], "command": "js_prettier" }

Liên kết:


1
Đây là câu trả lời tốt nhất hiện nay! đẹp hơn là da bom!
majorBummer

1
Vâng, thực sự, điều này cũng làm việc hoàn hảo cho tôi. Điều quan trọng nhất cần chú ý là phần "toàn cầu".
Ionut Necula

19

Để thêm vào những gì @Shoobah đã nói:

Có một cài đặt trong plugin HTML-CSS-JS Prettify cho phép bạn bỏ qua cú pháp xml trong tệp js / jsx. Bằng cách đó, nó không làm rối mã jsx. Cài đặt là: "e4x": true trong phần "js" của tệp cài đặt

Đi tới: Tùy chọn> Cài đặt gói> HTML \ CSS \ JS Kiểm tra trước> Đặt Tùy chọn Chỉnh sửa trước

Đi tới phần "js":

Thêm "jsx" vào "allow_file_extension", sau đó thay đổi "e4x" thành "true"


16

câu trả lời trên internet luôn nói với bạn rằng hãy đặt 'e4x' thành true, nhưng đôi khi, chúng tôi phải đặt tùy chọn 'format_on_save_extensions' rồi thêm 'jsx' vào mảng

sửa đổi jsFormat.sublime-settings

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

Tôi đã làm theo lời của bạn, nhưng nó không hiệu quả với tôi. :(
Yash Vekaria

Ở đâu "jsFormat.sublime-settings" được tìm thấy? để tôi có thể sửa đổi "format_on_save_extensions": ["js", "json", "jsx"]. Gần nhất tôi tìm thấy về phần mở rộng tệp là:"js": { "allowed_file_extensions": ["js", "json",...]
Chris22

Bạn có thể tìm thấy nó ở đây: Preferences> Package Settings> jsFormat> Settings - User. Không làm việc cho tôi, mặc dù vẫn indents JSX thật là thú vị :(
Niclas

Tôi đã tìm kiếm một giải pháp và giải pháp này đã giải quyết được vấn đề của tôi, cảm ơn!
Al-Maamari Tareq

4

Sử dụng Trình cài đặt gói của Sublime, cài đặt Babel . Sau đó:

  1. Mở tệp .jsx.
  2. Chọn Xem từ menu,
  3. Sau đó, Cú pháp -> Mở tất cả với phần mở rộng hiện tại là ... -> Babel -> JavaScript (Babel).

Ngoài ra còn có một gói ngôn ngữ JSX có thể được sử dụng
TabsNotSpaces,

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.