三种跑 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。
坑
- 全局变量
namelength等会被覆盖——别命名碰这些 console.log异步刷新(除非 stderr)——程序立即退出可能丢日志node -e在 Windows 下引号转义复杂——脚本写文件里更稳
下一篇:包管理 npm。