如何在 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\nodejs
和 C:\Users\my_user_name\AppData\Roaming
都被节点安装程序
添加到全局环境 PATH
变量中
我把它放在我的 JS 文件的顶部:
#!/usr/bin/env node
哪个节点似乎在 .cmd 文件中正确翻译为:
"%~dp0\node.exe"
我一直在尝试创建将 运行 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\nodejs
和 C:\Users\my_user_name\AppData\Roaming
都被节点安装程序
PATH
变量中
我把它放在我的 JS 文件的顶部:
#!/usr/bin/env node
哪个节点似乎在 .cmd 文件中正确翻译为:
"%~dp0\node.exe"