从命令行运行 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 runyarn run)相比,Node.js 的任务运行器刻意地功能更有限。它专注于性能和简洁性,省略了诸如运行 prepost 脚本等功能。这使其适用于简单的任务,但可能无法覆盖所有用例。