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

标签 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

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

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

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

$ lb-discover

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

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

任何帮助将不胜感激。

最佳答案

#!/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

关于Node.js 命令行工具在记事本中打开而不是执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507320/

相关文章:

javascript - 如何在解构时检查对象 prop 是否存在?

java - 在继续之前完全执行 Java 中的命令行

command-line - P4 如何 check out 文件到指定变更列表? (使用命令行)

node.js - Node 失败退出代码 1

javascript - 终端错误: TypeError: Cannot destructure property 'interface' of 'require(...)' as it is undefined

node.js - mongoose - blogPost 不是构造函数错误(架构/模型错误)

javascript - 如何让 React-Router 呈现服务器的交互式输出?

javascript - NodeJS 异步库不会异步发送请求

bash - 如何扩展 bash shell?

node.js - 如何将 'phantomjs' 包引用更新为 'phantomjs-prebuilt' - 来自 Mac OS 终端的消息