从命令行运行 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 -- --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 脚本等功能。 这使其适用于简单的任务,但可能无法涵盖所有用例。