我尝试创建一个简单的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命令行?
如有任何帮助,我们将不胜感激。
3条答案
按热度按时间kr98yfug1#
将
#!/usr/bin/env node
添加到lb-model-discovery/index.js
的第一行。然后再次安装软件包。将生成此脚本
字符串
而不是
型
来源:https://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm
eblbsuwk2#
我可以通过修改
lb-discover.cmd
的内容来解决这个问题:字符串
对此:
型
我的问题是,为什么执行
npm install -g
摆在首位,生成错误的脚本?yc0p9oo03#
对于那些认为他们已经把
#!/usr/bin/env node
放在脚本开头的人,请再次检查!一些教程有不正确的额外空间。错误!:
# !/usr/bin/env node
正确:
#!/usr/bin/env node