“npm isntall”命令存在

当你input一个非法的npm命令,你会得到一个用户友好的错误信息,说明哪些命令可以使用:

 $ npm illegal Usage: npm <command> where <command> is one of: add-user, adduser, apihelp, author, bin, bugs, c, cache, completion, config, ddp, dedupe, deprecate, docs, edit, explore, faq, find, find-dupes, get, help, help-search, home, i, info, init, install, isntall, issues, la, link, list, ll, ln, login, ls, outdated, owner, pack, prefix, prune, publish, r, rb, rebuild, remove, repo, restart, rm, root, run-script, s, se, search, set, show, shrinkwrap, star, stars, start, stop, submodule, tag, test, tst, un, uninstall, unlink, unpublish, unstar, up, update, v, version, view, whoami 

您可能会注意到,其中还有isntall命令

这个命令的意义是什么? 如果这是为了处理拼写错误而创build的,那为什么不对insatllinsatll等进行特殊的处理? 另外, uninstall没有相应的unisntall选项。

(使用npm 1.3.22版本)。


我问的原因是我有点惊讶和困惑,如何处理错字。 例如, git比较你input的命令,并build议它可用的最接近的命令:

 $ git stats git: 'stats' is not a git command. See 'git --help'. Did you mean this? status 

另外, pip Python包pipe理器还内置了一个类似的function:

 $ pip isntall ERROR: unknown command "isntall" - maybe you meant "install" 

仅供参考,它使用difflib.get_close_matches()函数。

我是Github上关联问题的最初“提升者”,那些是开源OSS软件的第一天……我认为这只是一个错字,也许一个pull请求可以解决这个问题。 但是我很幸运,首先提出一个问题(#2933) ,看看他们是否正在寻找在这方面的贡献…

事实certificate,这个问题围绕着这个问题展开了全面的讨论,这个问题很好看。

isntall命令的存在理由是因为npm维护者认为它为他们节省了时间,从而也节省了其他几个开发人员。 正如在关联问题中所讨论的那样,这是一个有争议的决定,有几个人提出了更有趣的解决拼写错误的方法,比如使用有效npm命令( https://www.npmjs)中的levenshtein距离计算非法命令。 org / package / levenshtein )。

无论如何,我认为如果你实现了这些algorithm中的一个,并为npm项目做出贡献,那么这个好的图书馆将是一个很好的补充。

因为没有办法处理每一个可能的错字,而不会破坏其他的东西。 初始化可能是一个安装错误。

从input或其他东西可以做levenshtein距离,但引入不必要的复杂性。