По-прежнему нет ничего встроенного, чтобы обеспечить точную функциональность, которую вы описываете. Однако в качестве альтернативы его использованию require
можно использовать .load
команду в REPL, например:
.load foo.js
Он загружает файл построчно, как если бы вы ввели его в REPL. В отличие от require
этого, история REPL засоряется загруженными вами командами. Тем не менее, он имеет то преимущество, что его можно повторять, потому что он не кэшируется, как require
.
Что лучше для вас, будет зависеть от вашего варианта использования.
Изменить: он имеет ограниченную применимость, потому что он не работает в строгом режиме, но три года спустя я узнал, что если в вашем скрипте его нет 'use strict'
, вы можете использовать его eval
для загрузки своего скрипта, не загрязняя историю REPL:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
я всегда использую эту команду
работает точно так же, как в Python без каких-либо пакетов.
источник
Я сделал Vorpal.js , который решает эту проблему, превращая добавление узла в интерактивный интерфейс командной строки. Он поддерживает расширение REPL, которое переводит вас в REPL в контексте вашего запущенного приложения.
Затем вы можете запустить приложение, и оно перейдет в REPL.
источник
Другой способ - определить эти функции как глобальные.
Затем предварительно загрузите файл в REPL как:
После этого к функции
helloWorld
можно будет получить доступ прямо в REPL.источник
Я создал replpad, так как устал многократно перезагружать скрипт.
Просто установите его через:
npm install -g replpad
Затем используйте его, запустив:
replpad
Если вы хотите, чтобы он просматривал все файлы в текущем и всех подкаталогах и передавал их в ответ при изменении, выполните:
replpad .
Посмотрите видео на сайте, чтобы лучше понять, как это работает, и узнать о некоторых других приятных функциях, таких как:
dox()
функцию, которая добавляется к каждой основной функции, т.е.fs.readdir.dox()
dox()
функцию, которая добавляется к каждому модулю, установленному через npm, т.е.marked.dox()
src
свойство, которое добавляется к каждой функции, т. е.express.logger.src
.talk
команда).append
командыСм .: https://github.com/thlorenz/replpad
источник
CXX=clang++ npm install replpad
обойти ошибкуg++: 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
Почему бы не загрузить файл в интерактивный узел repl?
Затем вы можете добавить в package.json скрипты
протестировано с использованием узла v8.1.2
источник
node -i -r "./build/main/index.js"
?В настоящее время вы не можете сделать это напрямую, но можете
mylib = require('./foo.js')
в REPL. Помните, что методы экспортируются, а не объявляются как глобальные.источник
.load my_work.js
, несмотря на то , что требуются некоторые дополнительныеexports.working_var = ...
объявления, потому что REPL блокирует некоторые виды совершенно допустимого javascript, например многострочные комментарии (по крайней мере, с моейreadline
конфигурацией).replpad
это круто, но для быстрого и простого способа загрузить файл в узел, импортировать его переменные и запустить ответ, вы можете добавить следующий код в конец вашего .js файлаТеперь, если ваш файл
src.js
запущенnode src.js
, запускается узел, загружается файл, запускается REPL и копируются все объекты, объявленные какvar
на верхнем уровне, а также любые экспортированные глобальные объекты . Вif (require.main === module)
гарантирует , что этот код не будет выполняться , еслиsrc.js
включен черезrequire
заявление. Фактически, вы можете добавить любой код, который вы хотите исполнять, когда вы работаете вsrc.js
автономном режиме для целей отладки внутриif
оператора.источник
Вот версия ответа Джорджа с функцией bash :
Если вы поместите это в свой,
~/.bash_profile
вы можете использовать его как псевдоним, то есть:источник
Еще одно предложение, которого я здесь не вижу: попробуйте этот небольшой фрагмент кода
Затем вы можете просто запустить этот скрипт, и он будет включен
foo
в качестве переменнойисточник
Старый ответ
Откроет узел REPL и введет все строки из test.js в REPL, но по какой-то причине узел закроется после завершения файла
Другая проблема в том, что функции не будут подняты.
Лучший ответ
Тогда все глобальные переменные, объявленные без var в test2.js, будут доступны в REPL
не уверен, почему var a в глобальной области не будет доступен
источник