Node.js命令行工具在记事本中打开,而不是执行

Node.js命令行工具在记事本中打开,而不是执行,node.js,command-line,npm,Node.js,Command Line,Npm,我尝试创建一个简单的node.js命令行工具来绕过这个概念。我正在关注这一点。使用npminit,我创建了一个名为lb model discovery的项目。这是package.json的内容 { "name": "lb-model-discovery", "version": "1.0.0", "description": "loopback model discovery command line tool", "main": "index.js", "bin" :{

我尝试创建一个简单的node.js命令行工具来绕过这个概念。我正在关注这一点。使用
npminit
,我创建了一个名为
lb model discovery
的项目。这是package.json的内容

{
  "name": "lb-model-discovery",
  "version": "1.0.0",
  "description": "loopback model discovery command line tool",
  "main": "index.js",
  "bin" :{
      "lb-discover":"./index.js"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "seya obey",
  "license": "ISC"
}
这是项目根目录下
index.js
的(非常简单)内容:

console.log('hello world');
之后,我从文件夹中执行了这个命令(如上面教程所建议的):

这将正确地将我的工具安装为全局节点命令行模块。进入我的系统(windows)中节点模块的全局存储库,我可以看到这是在npm文件夹中创建的文件:
lb discover.cmd
。其内容如下:

@"%~dp0\node_modules\lb-model-discovery\index.js"   %*
但现在,当我从命令行提示符运行新工具时:

$ lb-discover
它不会在控制台中显示“Hello world”消息,而是打开记事本,只显示index.js文件的内容

我做错了什么?如何执行自定义node.js命令行


任何帮助都将不胜感激。

我通过修改
lb discover.cmd
的内容,解决了这个问题:

@"%~dp0\node_modules\lb-model-discovery\index.js"   %*
为此:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\lb-model-discovery\index.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\node_modules\lb-model-discovery\index.js" %*
)
我的问题是为什么执行
npm install-g
首先会生成错误的脚本?

Add
#/usr/bin/env节点
lb model discovery/index.js的第一行
。然后再次安装该软件包

将生成此脚本

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\lb-model-discovery\index.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\node_modules\lb-model-discovery\index.js" %*
)
而不是

@"%~dp0\node_modules\lb-model-discovery\index.js"   %*

来源:

尝试取消与要使用记事本打开的文件扩展名.js的链接:右键单击文件属性“使用取消选中的记事本打开”,我希望这有帮助。谢谢您的回答。但是“取消链接”文件扩展名是什么意思?同一文件夹中的其他命令行工具工作正常。请右键单击文件>属性>打开方式>取消选中记事本,我希望此帮助感谢位文件扩展名不是问题,因为具有相同扩展名的其他命令行工具工作正常。哦,很抱歉,因为我知道一些相同的情况出现错误,但没有真正检查代码;)因为没有发布。
@"%~dp0\node_modules\lb-model-discovery\index.js"   %*