【问题标题】:How to create global commands in Node.js on Windows如何在 Windows 上的 Node.js 中创建全局命令
【发布时间】:2015-03-22 00:19:02
【问题描述】:

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

我能够让它工作的唯一方法是进入 Node 在运行“npm link”后生成的“Windows 命令”文件并手动调整值。这可行,但似乎不是最好的解决方案。

我使用的“目录标识符”是:

#!C:\Users\-我的用户名-\AppData\Roaming\npm\"env node"

生成的 Node.js“Windows 命令”(不起作用):

@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命令”:

@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" (

【问题讨论】:

标签: windows node.js command command-prompt


【解决方案1】:

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

在文件夹%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 都已通过 Node 安装程序添加到全局环境 PATH 变量中

【讨论】:

  • 感谢您的帮助。这不是我想要的解决方案,但它会同时工作。我正在使用“@node %~dp0\node_modules\Node-Command\Test.js %*”,所以它会进入当前目录。我还编写了一个节点命令来为我自动执行此过程。如果您想要源代码,我非常乐意发布。
  • @Alec 我还在使用自定义脚本来自动生成我的答案中的命令(在安装时),因此生成的脚本的可移植性对我来说不是问题。如果您知道一个可以更轻松地解决您的问题的答案,请务必将其发布(包含所有有用的详细信息)为self-answer,如果没有其他人提供更好的答案,请毫不犹豫地接受它
【解决方案2】:

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

#!/usr/bin/env node

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

"%~dp0\node.exe"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2013-05-12
    相关资源
    最近更新 更多