我尝试创建一个简单的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/