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

时间:2017-09-30 21:46:35

标签: node.js command-line npm

我尝试创建一个简单的node.js命令行工具来解决这个概念。我正在关注这个tutorial。使用npm init,我创建了一个名为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');

之后我从文件夹中执行了这个命令(如上面的教程所示):

npm install -g

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

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

但是现在当我从命令行提示符运行我的新工具时:

$ lb-discover

而不是显示" Hello world"在控制台中,它会打开记事本而只显示index.js文件的内容。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

#!/usr/bin/env node添加到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"   %*

来源:https://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm

答案 1 :(得分:0)

我可以通过修改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,生成了错误的脚本?