三种跑 JS 的姿势

1. REPL(交互式)

node
> 1 + 1
2
> const name = 'WadeLy'
> `Hello, ${name}`
'Hello, WadeLy'
> .exit

REPL = Read-Eval-Print Loop。适合试 API / 算个东西

REPL 命令(点开头):

命令 作用
.help 帮助
.exit 退出(Ctrl+D 也行)
.clear 清当前缓冲
.editor 进多行编辑模式
.load file.js 加载文件
.save file.js 保存当前会话

2. 跑文件

# hello.js
console.log('Hello from Node');
const os = require('os');
console.log(`Running on ${os.platform()}`);
node hello.js

3. 直接跑代码

node -e "console.log(2+2)"               # 跑一段代码
node -p "Math.PI"                         # -p 自动 print(不用 console.log)
node -e "require('fs').readdirSync('.').forEach(f=>console.log(f))"

全局对象

浏览器有 window,Node 有 global(Node 21+ 也支持 globalThis):

console.log(globalThis === global);  // true(Node)

Node 全局变量速记:

全局 含义
process 当前进程对象
__dirname 当前文件所在目录(CJS)
__filename 当前文件路径(CJS)
Buffer 二进制数据
setTimeout / setInterval 同浏览器
setImmediate 下个 IO 周期跑(Node 特有)
queueMicrotask 微任务

命令行参数

// args.js
console.log(process.argv);
node args.js hello world
# [
#   '/usr/bin/node',
#   '/path/to/args.js',
#   'hello',
#   'world'
# ]

process.argv[0] = node 路径;process.argv[1] = 脚本路径;process.argv[2+] = 用户传的。

环境变量

console.log(process.env.HOME);
console.log(process.env.NODE_ENV);
NODE_ENV=production node app.js              # Linux / macOS
$env:NODE_ENV="production"; node app.js      # Windows PowerShell

退出

process.exit(0);          // 正常退出
process.exit(1);          // 异常退出

进程会等所有事件循环空了再自然退出——不需要手动 exit。

现代替代:直接跑 TypeScript / ESM

# tsx 让你直接跑 .ts
npx tsx script.ts

# 或 bun(不是 node 但兼容)
bun run script.ts

详见 36-typescript / 37-toolchain。

  • 全局变量 name length 等会被覆盖——别命名碰这些
  • console.log 异步刷新(除非 stderr)——程序立即退出可能丢日志
  • node -e 在 Windows 下引号转义复杂——脚本写文件里更稳

下一篇:包管理 npm。