Masih belum ada built-in untuk memberikan fungsionalitas tepat yang Anda gambarkan. Namun, alternatif untuk menggunakannya require
untuk menggunakan .load
perintah dalam REPL, seperti:
.load foo.js
Itu memuat file sejalan dengan baris sama seperti jika Anda mengetiknya di REPL. Tidak seperti require
ini mencemari riwayat REPL dengan perintah yang Anda muat. Namun, ini memiliki keuntungan karena dapat diulang karena tidak di-cache seperti require
.
Mana yang lebih baik untuk Anda akan tergantung pada use case Anda.
Sunting: Ini memiliki penerapan terbatas karena tidak bekerja dalam mode ketat, tetapi tiga tahun kemudian saya telah belajar bahwa jika skrip Anda tidak memiliki 'use strict'
, Anda dapat menggunakan eval
untuk memuat skrip Anda tanpa mencemari riwayat REPL:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
saya selalu menggunakan perintah ini
bekerja persis seperti di Python tanpa paket apa pun.
sumber
Saya membuat Vorpal.js , yang menangani masalah ini dengan mengubah simpul Anda menjadi CLI interaktif. Ini mendukung ekstensi REPL, yang menjatuhkan Anda ke dalam REPL dalam konteks aplikasi Anda yang sedang berjalan.
Kemudian Anda dapat menjalankan aplikasi dan itu akan jatuh ke dalam REPL.
sumber
Cara lain adalah mendefinisikan fungsi-fungsi tersebut sebagai global.
Kemudian pramuat file dalam REPL sebagai:
Maka fungsi tersebut
helloWorld
dapat diakses langsung di REPL.sumber
Saya membuat replpad karena saya bosan memuat ulang skrip berulang kali.
Cukup instal melalui:
npm install -g replpad
Kemudian gunakan dengan menjalankan:
replpad
Jika Anda ingin menonton semua file di subdirektori saat ini dan semua dan pipa ke repl ketika mereka berubah lakukan:
replpad .
Lihat video di situs untuk mendapatkan ide yang lebih baik tentang cara kerjanya dan pelajari beberapa fitur bagus lainnya seperti ini:
dox()
fungsi yang ditambahkan ke setiap fungsi inti, yaitufs.readdir.dox()
dox()
fungsi yang ditambahkan ke setiap modul yang diinstal melalui npm, yaitumarked.dox()
src
properti yang ditambahkan ke setiap fungsi, yaituexpress.logger.src
.talk
perintah).append
perintah keyboardLihat: https://github.com/thlorenz/replpad
sumber
CXX=clang++ npm install replpad
mengatasi kesalahang++: error: unrecognized command line option '-stdlib=libc++'
# # Fatal error in ../deps/v8/src/api.cc, line 1248 # Check failed: !value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(). # Illegal instruction: 4
Mengapa tidak memuat file ke repl node interaktif?
Kemudian Anda bisa menambahkan ke script package.json
diuji menggunakan simpul v8.1.2
sumber
node -i -r "./build/main/index.js"
?Saat ini Anda tidak bisa melakukan itu secara langsung, tetapi Anda bisa
mylib = require('./foo.js')
di REPL. Ingat metode diekspor, tidak dinyatakan sebagai global.sumber
.load my_work.js
, meskipun memerlukan beberapaexports.working_var = ...
deklarasi tambahan , karena REPL muntah pada beberapa jenis javascript yang benar-benar valid, seperti komentar multiline (setidaknya denganreadline
konfigurasi saya ).replpad
itu keren, tetapi untuk cara cepat dan mudah memuat file ke dalam simpul, mengimpor variabel-variabelnya dan memulai repl, Anda dapat menambahkan kode berikut ke akhir file .js AndaSekarang jika file Anda
src.js
, menjalankannode src.js
akan memulai node, memuat file, memulai REPL, dan menyalin semua objek yang dinyatakan sebagaivar
di tingkat atas serta semua global yang diekspor. Theif (require.main === module)
memastikan bahwa kode ini tidak akan dieksekusi jikasrc.js
disertakan melaluirequire
pernyataan. Sebenarnya, Anda dapat menambahkan kode apa pun yang ingin dikecualikan saat menjalankansrc.js
mandiri untuk keperluan debugging di dalamif
pernyataan.sumber
Inilah versi fungsi bash dari jawaban George :
Jika Anda memasukkan ini ke dalam Anda,
~/.bash_profile
Anda dapat menggunakannya seperti alias, yaitu:sumber
Saran lain yang tidak saya lihat di sini: coba sedikit kode ini
Kemudian Anda cukup menjalankan skrip ini dan itu akan dimasukkan
foo
sebagai variabelsumber
Jawaban lama
Akan membuka simpul REPL dan mengetikkan semua baris dari test.js ke dalam REPL, tetapi untuk beberapa alasan simpul akan berhenti setelah file berakhir
Masalah lainnya adalah, bahwa fungsi tidak akan diangkat.
Jawaban yang lebih baik
Kemudian semua global yang dinyatakan tanpa var di dalam test2.js akan tersedia di REPL
tidak yakin mengapa var a dalam lingkup global tidak akan tersedia
sumber