Làm cách nào để khối nguồn org-babel hoạt động với ES6-7?


9

Tôi gặp khó khăn khi lấy org-babel để đánh giá khối mã này với


nút emacs v24.5 v5.0.0
babel-nút v.6.6.5

 # + BEGIN_SRC js: cmd "nút babel"

   đặt mảng = [1, 2]; 
   let [x, y] = mảng;

   console.log (x);
   console.log (y);

 # + END_SRC


Đầu ra trông như thế này

/ tmp / babel-3700Vaq / js-script-37003RN: 2
đặt mảng = [1, 2]; ^ ^ Cú pháp: Khai báo phạm vi khối (let, const, function, class) chưa được hỗ trợ ngoài chế độ nghiêm ngặt tại export.runIn ThisContext (vm.js: 53: 16) tại Module._compile (module.js: 404: 25) tại trình tải (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126 tại Object.require.extensions. (hàm ẩn danh) [dưới dạng tại Module.load (module.js: 356: 32) tại Function.Module._load (module.js: 311: 12) tại Function.Module.runMain (module.js: 457: 10) tại /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:27 tại đối tượng (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:162:7) tại Module._compile (module.js: 425: 26) *

Nhưng khối nguồn này có vẻ ổn

 # + BEGIN_SRC js: cmd "nút babel"
 số const = [10,20,30,50];
 const MultiplyBy10 = Numbers.map (a => a * 10);
 console.log (MultiplyBy10);

 # + END_SRC

 # + KẾT QUẢ:
 | 100 | 200 | 300 | 500 |


Chỉnh sửa: Đã thêm chức năng tự thực thi với "sử dụng nghiêm ngặt"

# + BEGIN_SRC js: cmd "nút babel" 
(hàm xy () {
"Sử dụng nghiêm ngặt";
đặt mảng = [1, 2];
let [x, y] = mảng;
console.log (x);
console.log (y);
}) ()

# + END_SRC

# + KẾT QUẢ:

Đầu ra trông như thế này

/ tmp / babel-13529OHt / js-script-13529MVq: 6
    let [x, y] = mảng;
        ^

Cú pháp: Mã thông báo bất ngờ [
    tại export.runIn ThisContext (vm.js: 53: 16)
    tại Module._compile (module.js: 404: 25)
    tại trình tải (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126
    tại Object.require.extensions. (hàm ẩn danh) [dưới dạng
    tại Module.load (module.js: 356: 32)
    tại Function.Module._load (module.js: 311: 12)
    tại Function.Module.runMain (module.js: 457: 10)
    tại /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:27
    tại đối tượng (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:162:7)
    tại Module._compile (module.js: 425: 26)


Chỉnh sửa: Nhờ @ebpa tôi đã quản lý để giải quyết nó với

cài đặt npm -g babel-preset-es2015


Đây là đầu ra tôi nhận được sau khi đánh giá khối nguồn mặc định, không có trình bao bọc chức năng tự thực thi.

/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:372
          đưa ra Lỗi mới ("Không thể tìm thấy cài đặt trước" + JSON.opesify (val) + "liên quan đến thư mục" + JSON.opesify (dirname));
          ^

Lỗi: Không thể tìm thấy cài đặt trước "es2015" liên quan đến thư mục "/ tmp / babel-270346ez"
    tại /usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:372:17
    tại Array.map (bản địa)
    tại OptionManager.resolvePresets (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:364:20)
    tại OptionManager.mergePresets (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:348:10)
    tại OptionManager.mergeOptions (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:307:14)
    tại OptionManager.init (/usr/local/lib/node_modules/babel-cli/node_modules/babel-core/lib/transifying/file/options/option-manager.js:465:10)
    tại biên dịch (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:81:45)
    tại trình tải (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:126:14)
    tại Object.require.extensions. (hàm ẩn danh) [dưới dạng
    tại Module.load (module.js: 356: 32)


Chỉnh sửa: Kích hoạt thiết bị đầu cuối và chạy nút babel

> yêu cầu ('babel-preset-es2015');

Đầu ra

Lỗi: Không thể tìm thấy mô-đun 'babel-preset-es2015'
    tại Function.Module._resolveFilename (module.js: 337: 15)
    tại Function.Module._load (module.js: 287: 25)
    tại Module.require (module.js: 366: 17)
    theo yêu cầu (module.js: 385: 17)
    tại thay thế: 1: 1
    tại Object.exports.runIn ThisContext (vm.js: 54: 17)
    tại _eval (/home/johnwind/.nvm/versions/node/v5.0.0/lib/node_modules/babel-cli/lib/_babel-node.js:102:26)
    tại REPLServer.replEval (/home/johnwind/.nvm/versions/node/v5.0.0/lib/node_modules/babel-cli/lib/_babel-node.js:187:14)
    tại ràng buộc (domain.js: 280: 14)
    tại REPLServer.runBound [as eval] (domain.js: 293: 12)

Chỉnh sửa: Theo dõi để có được nó và chạy

http://rwx.io/posts/org-with-babel-node-updated/

Chỉnh sửa: Bài đăng này đã cho tôi một số manh mối cho mảnh ghép này

https://phovenator.babeljs.io/T6723

http://discuss.babeljs.io/t/error-parsing-jsx-with-global-installation-babel-preset-react/59/6

Chỉnh sửa: Cuối cùng, nó đã hoạt động bằng cách cài đặt một bản sao cục bộ

$ mkdir local_babel
$ cd local_babel
$ npm init
$ npm cài đặt --save-dev babel-cli
$ npm cài đặt --save-dev babel-core
$ npm cài đặt --save-dev babel-preset-es2015
$ npm cài đặt --save-dev babel-preset-giai đoạn-0
$ npm cài đặt --save-dev babel-preset-giai đoạn-1
$ npm cài đặt --save-dev babel-preset-giai đoạn-2
$ npm cài đặt --save-dev babel-preset-giai đoạn-3

đã tạo một liên kết mềm cho nút babel

$ cd / usr / local / bin
$ ln -s ~ / local_babel / node_modules / babel-cli / bin / babel-node.js org-babel-node

.zshrc

xuất npm_config_prefix = $ HOME / .node_modules
xuất PATH = $ PATH: $ HOME / .node_modules / bin

Đã thêm cái này vào init.el của tôi

(setenv "NODE_PATH"
    (concat
        "/ home / johnwind / local_babel / node_modules" ":"
         (getenv "NODE_PATH")
    )
)

đầu ra

# + BEGIN_SRC js: cmd "org-babel-node --presets es2015" 

đặt mảng = [1, 2];
let [x, y] = mảng;

console.log (x);
console.log (y);

# + END_SRC

# + KẾT QUẢ:
: 1
: 2
: chưa xác định

Để bây giờ tôi có cả bản sao địa phương và toàn cầu của babel-cli, babel-core, babel-preset-es2015. Điều vẫn không thể che giấu đầu tôi vì điều này thật lãng phí tài nguyên.

Nhưng nó đã có tác dụng.


Bạn đã thử thêm "strict"vào dòng đầu tiên của mã nguồn chưa? Đây là những gì lỗi dường như đề nghị.
wvxvw

nó không hoạt động. Bạn đã quản lý để làm cho họ làm việc? Nếu vậy, bạn có thể xây dựng các bước thực hiện.
Johnathan Foong

@JohnathanFoong Tôi nghĩ @wvxvw có nghĩa là "use strict"không "strict", hãy thử nó.
Jordon Biondo

đây là lỗi tôi gặp phải sau khi thêm "sử dụng nghiêm ngặt" SyntaxError: Mã thông báo bất ngờ [tại export.runIn ThisContext (vm.js: 53: 16) tại Module._compile (module.js: 404: 25) ...
Johnathan Foong

Có lẽ bạn nên bọc mã đó vào một hàm tự gọi và thêm "use strict";vào lúc bắt đầu.
caisah

Câu trả lời:


5

Đây là một vấn đề với việc chuyển đổi Babel 6 sang sử dụng các plugin độc quyền. Bạn cần cài đặt plugin cài sẵn es2015:

npm install -g babel-preset-es2015

và cũng yêu cầu nó trong lệnh gọi:

#+BEGIN_SRC js :cmd "babel-node --presets es2015"
let arr = [1, 2];
let [x, y] = arr;

console.log(x);
console.log(y);
#+END_SRC

Cảm ơn đã sửa chữa, và bây giờ tôi phải đối mặt với một thử thách mới bên dưới
Johnathan Foong

Và bạn đã cài đặt nó trên toàn cầu? Hãy thử chạy một tập lệnh bên ngoài emacs chỉ require ('babel-preset-es2015');để thấy rằng nó đã được cài đặt và có thể truy cập
ebpa

Tôi đã chạy ở trên nút babel trong một thiết bị đầu cuối và đầu ra là Lỗi: Không thể tìm thấy mô-đun 'babel-preset-es2015' ....
Johnathan Foong

Sau khi chạy nhanh về bác sĩ babel, tôi nhận thấy tôi đang thiếu một .babelrc. Làm thế nào tôi nên đối phó với điều này?
Johnathan Foong

Nếu babel-preset-es2015được cài đặt thành công trên toàn cầu, bạn có thể gặp sự cố với NODE_PATH. Theo như .babelrc babel-node --presets es2015hoàn thành điều tương tự như { "presets": ["es2015"] }trong .babelrc của bạn, do đó, một .babelrc không thực sự cần thiết. .babelrc chắc chắn sẽ được ưu tiên, nhưng vì một số lý do, nút babel không bao giờ xem xét ~ / .babelrc trên hệ thống của tôi.
ebpa
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.