2013-08-29 26 views
18

Khi tôi chạy node từ dòng lệnh không có đối số, tôi nhập một trình bao tương tác. Nếu tôi thực hiện một số lệnh, nút thoát và nút khởi động lại, mũi tên lên không làm bất cứ điều gì (tôi muốn nó cuộn qua các lệnh trước của tôi).Có cách nào để giữ nút lưu trữ lịch sử dòng lệnh giữa các phiên không?

Có cách nào tôi có thể gọi nút tương tác sao cho nó sẽ nhớ các lệnh cũ của tôi không?

+0

Vì vậy, bạn đã thử những gì cho đến nay? [node-shell] (https://github.com/wdavidw/node-shell) dường như có các tính năng, trong số rất nhiều tính năng khác. – TC1

Trả lời

22

Bạn có thể sử dụng rlwrap để lưu trữ lệnh REPL node.js trong tệp lịch sử.

Trước tiên, hãy cài đặt rlwrap (được thực hiện dễ dàng với trình quản lý gói như apt-get hoặc brew etc).

Sau đó thêm một bí danh cho nút:

alias node='env NODE_NO_READLINE=1 rlwrap node' 

Tôi đang trên OSX vì vậy tôi thêm rằng bí danh để tập ~/.bash_profile của tôi, và sẽ tải lại tập tin bash_profile của tôi qua source ~/.bash_profile .. và tôi là tốt để đi !

Hy vọng điều này sẽ hữu ích!

+0

Tôi đã sử dụng lệnh (không chính xác): 'nút rlwrap' và đã thất vọng vì lý do tại sao nút REPL không giữ lại lịch sử của tôi. Điều này đã giải quyết được vấn đề của tôi! –

+3

Mặc dù rlwrap làm cho bạn mất màu sắc đẹp nút repl. – dentarg

+0

Đồng thời hoàn thành tab – Daiwei

15

Tôi tìm thấy một dự án nhỏ đẹp, mà giải quyết vấn đề:

https://www.npmjs.org/package/repl.history

cài đặt sử dụng NPM (npm install -g repl.history) và chạy repl.history trên dòng lệnh.

+0

Phương pháp này bảo toàn màu sắc và hoàn thành tab. Yay! –

+0

@SamH Chỉnh sửa không được thay đổi hoặc mở rộng câu trả lời gốc theo bất kỳ cách nào. Chúng có nghĩa là chỉ để làm rõ ngữ pháp, chính tả, định dạng, v.v. Điều này một phần là do thực tế là các chỉnh sửa đã được cộng đồng phê duyệt, chứ không phải chủ sở hữu của bài đăng mà bạn đang chỉnh sửa. Nếu bạn có đề xuất, chúng thuộc về ý kiến ​​hoặc câu trả lời của riêng bạn. Xem: http://meta.stackexchange.com/questions/11474/what-is-the-etiquette-for-modifying-posts –

+0

Tuyệt vời, cảm ơn. :) –

3

Tôi thích sự kết hợp của cả hai câu trả lời của dreampulse và badsyntax. Với repl.history, cộng với một bổ sung vào .bash_profile của tôi, tôi nhận được hành vi mà tôi mong đợi, đó là lịch sử lệnh và cú pháp tô sáng trong nút tương tác, nhưng bỏ qua repl khi được gọi với các đối số (để chạy tập lệnh).

npm install -g repl.history 

Sau đó chỉnh sửa của bạn ~/.bash_profile, nói thêm:

function node(){ 
    if test "$#" -lt 1; then repl.history 
    else env node [email protected]; fi; } 

Bây giờ khởi động lại vỏ của bạn hoặc chạy . ~/.bash_profile và bạn tốt để đi.


Bây giờ chạy

$ node 

sẽ mở repl.history nodejs vỏ tương tác, và

$ node program.js [...] 

sẽ chạy program.js với nút như mong đợi.

5

io.js 2.0 bao gồm hỗ trợ cho persistent REPL history.

env NODE_REPL_HISTORY_FILE=$HOME/.node_history iojs 

Độ dài tối đa của lịch sử có thể được thiết lập với NODE_REPL_HISTORY_SIZE, mặc định là 1000.

Trong io.js 3.0+, lịch sử REPL được kích hoạt theo mặc định và NODE_REPL_HISTORY_FILE được phản đối ủng hộ NODE_REPL_HISTORY (mặc định: ~/.node_repl_history).

+0

Tôi đã tạo bí danh cho cái này như @badsyntax: 'alias iojs = 'env NODE_REPL_HISTORY_FILE = $ HOME/.node_history iojs'' –

Các vấn đề liên quan