如何在 Windows 上的 Node.js 中创建全局命令

How to create global commands in Node.js on Windows

我一直在尝试创建将 运行 in "Command Prompt" on windows in Node.js 的全局命令。不幸的是,所有教程似乎都是针对 Mac/Linux 的。这通常不会有问题,但是当我完全遵循它们并使用不同的目录字符串格式和位置以便它可以 Windows 兼容时,Node.js 无法准确解析链接。

我能够让它工作的唯一方法是进入节点在 运行 宁 "npm link" 之后生成的 "Windows Command" 文件并手动调整值。这可行,但似乎不是最佳解决方案。

我使用的 'directory identifier' 是:

#!C:\Users\-my username-\AppData\Roaming\npm\"env node"

已生成 Node.js "Windows Command"(不起作用):

@IF EXIST "%~dp0\C:\Users\-username-\AppData\Roaming\npm\"env.exe" (
  "%~dp0\C:\Users\-username-\AppData\Roaming\npm\"env.exe"  node" "%~dp0\node_modules\Node-Command\Test.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  C:\Users\-username-\AppData\Roaming\npm\"env  node" "%~dp0\node_modules\Node-Command\Test.js" %*
)

手动调整Node.js"Windows Command":

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\Node-Command\Test.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\node_modules\Node-Command\Test.js" %*
)

我得到的错误(来自生成的命令):

@IF EXIST "C:\Users\-username-\AppData\Roaming\npm\C:\Users\-username-\AppData\Roaming\npm\"env.exe" (

我不知道什么是正确的防弹方法,但是这个在我的开发机器上工作得很好:

在包含

的文件夹 %APPDATA%\npm 中创建文件 test.cmd
@node "C:\full\path\to\test.js" %*

在我的 Windows 版本中,%APPDATA% 扩展为 C:\Users\my_user_name\AppData\Roaming 因此完整的 shell 脚本名称将是 C:\Users\my_user_name\AppData\Roaming\npm\test.cmd

@ 表示不打印 cmd 脚本在内部执行的操作

%* 表示将所有提供给 test.cmd 脚本的命令行参数作为 process.argv 数组

中的值传递给 test.js 脚本

脚本假设 C:\Program Files\nodejsC:\Users\my_user_name\AppData\Roaming 都被节点安装程序

添加到全局环境 PATH 变量中

我把它放在我的 JS 文件的顶部:

#!/usr/bin/env node

哪个节点似乎在 .cmd 文件中正确翻译为:

"%~dp0\node.exe"