“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的,那为什么不对insatll
, insatll
等进行特殊的处理? 另外, 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距离,但引入不必要的复杂性。