从命令行运行 Node.js 脚本
运行 Node.js 程序的通常方法是运行全局可用的 node
命令(安装 Node.js 后),并传递要执行的文件名。
如果你的主 Node.js 应用程序文件是 app.js
,你可以通过输入以下命令来调用它
node app.js
上面,你明确告诉 shell 用 node
运行你的脚本。你也可以用 "shebang" 行将此信息嵌入到你的 JavaScript 文件中。“shebang”是文件中的第一行,它告诉操作系统使用哪个解释器来运行脚本。下面是 JavaScript 的第一行
#!/usr/bin/node
上面,我们明确给出了解释器的绝对路径。并非所有操作系统都在 bin 文件夹中有 node
,但都应该有 env
。你可以告诉操作系统以 node 作为参数运行 env
#!/usr/bin/env node
// your javascript code
要使用 shebang,你的文件需要有可执行权限。你可以通过运行以下命令来给 app.js
可执行权限
chmod u+x app.js
运行命令时,请确保你位于包含 app.js
文件的同一目录中。
将字符串作为参数传递给 node
而不是文件路径
要将字符串作为参数执行,你可以使用 -e
, --eval "script"
。它会将后面的参数作为 JavaScript 执行。在 REPL 中预定义的模块也可以在脚本中使用。
在 Windows 上,使用 cmd.exe 时,单引号无法正常工作,因为它只识别双引号 "
进行引用。在 Powershell 或 Git bash 中,'
和 "
都可以使用。
node -e "console.log(123)"
自动重启应用程序
从 Node.js V16 开始,有一个内置选项可以在文件更改时自动重启应用程序。这对于开发目的很有用。要使用此功能,你需要将 --watch
标志传递给 Node.js。
node --watch app.js
这样当你更改文件时,应用程序将自动重启。请阅读 --watch
标志文档。
使用 Node.js 运行任务
Node.js 提供了一个内置的任务运行器,允许你执行 package.json
文件中定义的特定命令。这对于自动化重复性任务特别有用,例如运行测试、构建项目或检查代码。
使用 --run
标志
--run
标志允许你从 package.json
文件的 scripts
部分运行指定的命令。例如,如果你有以下 package.json
{
"type": "module",
"scripts": {
"start": "node app.js",
"dev": "node --run start -- --watch",
"test": "node --test"
}
}
你可以使用 --run
标志运行 test
脚本
node --run test
向命令传递参数
让我们来解释一下 package.json
文件 scripts
对象中的 dev
键。
语法 -- --another-argument
用于向命令传递参数。在这种情况下,--watch
参数被传递给 dev
脚本。
node --run dev
环境变量
--run
标志设置了特定的环境变量,这些变量对你的脚本可能很有用
NODE_RUN_SCRIPT_NAME
:正在运行的脚本的名称。NODE_RUN_PACKAGE_JSON_PATH
:正在处理的package.json
文件的路径。
刻意设定的限制
与其他任务运行器(如 npm run
或 yarn run
)相比,Node.js 的任务运行器刻意地功能更有限。它专注于性能和简洁性,省略了诸如运行 pre
或 post
脚本等功能。这使其适用于简单的任务,但可能无法覆盖所有用例。