我有一个脚本foo.js
,里面包含一些函数想要在REPL中使用。
有没有一种方法可以让Node执行我的脚本,然后跳入REPL并具有所有已声明的全局变量,就像我可以使用python -i foo.py
或ghci foo.hs
一样?
我有一个脚本foo.js
,里面包含一些函数想要在REPL中使用。
有没有一种方法可以让Node执行我的脚本,然后跳入REPL并具有所有已声明的全局变量,就像我可以使用python -i foo.py
或ghci foo.hs
一样?
原始回答
type test.js|node -i
打开Node REPL并将test.js中的所有行输入REPL,但由于某些原因,文件结束后Node会退出。
另一个问题是,函数不会被提升。
node -e require('repl').start({useGlobal:true}); -r ./test2.js
那么在test2.js中声明的所有未使用var关键字的全局变量将在REPL中可用
不确定为什么全局作用域中的var a将不可用
官方的 Node.js REPL 支持异步方法
console.js
const repl = require('repl')
const mongoose = require('mongoose')
const run = async () => {
await mongoose.connect(process.env.DB_URL, {
useNewUrlParser: true,
useUnifiedTopology: true
})
const r = repl.start(`(${process.env.NODE_EN}) ⚡️ `)
r.context.User = require('./src/models/user.model')
r.context.mongoose = mongoose
console.log(`Ready `);
}
run()
启动控制台:
NODE_OPTIONS=--experimental-repl-await node console.js
User
模型暴露给控制台
await User.find({})
bash
中type
无法使用。更好的答案是,似乎你只需要在脚本中直接赋值给函数/变量的global
,而不必手动启动repl,可以通过node -r noderc.js
实现。应该有一种方法来适当地使用“vm.runInContext”,以便从脚本中获取更多的值。 - Gavin Haynescat
在 bash/posix 中是type
。 - Sam Washington