如何创build一个可以在全局安装的nodejs-command-line-tool?

如何构build/安装可以在全局范围内使用的node-command-line-tool?

我写了一个名为“ extractdeps ”的命令行实用程序,它将从package.json文件中列出来自节点应用程序的所有依赖项。

不像其他节点公用事业像“笑话”我不能在全球范围内执行它的shell没有进入其具体的path。

安装示例:

$ npm install --verbose -g extractdeps -g npm info it worked if it ends with ok npm verb cli [ '/usr/local/Cellar/node/8.9.1/bin/node', npm verb cli '/usr/local/bin/npm', npm verb cli 'install', npm verb cli '--verbose', npm verb cli '-g', npm verb cli 'extractdeps', npm verb cli '-g' ] npm info using npm@5.5.1 npm info using node@v8.9.1 npm verb npm-session 5cff952d9a7f0be7 npm http fetch GET 200 https://registry.npmjs.org/extractdeps 19ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/co 14ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/commander 16ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/fs 15ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/shelljs 16ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/glob 6ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/interpret 8ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/rechoir 8ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/fs.realpath 20ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/inflight 21ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/once 20ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/minimatch 21ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/inherits 22ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/path-is-absolute 21ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/wrappy 5ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/brace-expansion 4ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/balanced-match 5ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/concat-map 5ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/resolve 3ms (from cache) npm http fetch GET 200 https://registry.npmjs.org/path-parse 4ms (from cache) npm verb correctMkdir /Users/hagen/.npm/_locks correctMkdir not in flight; initializing npm verb lock using /Users/hagen/.npm/_locks/staging-3a08f0df5026584d.lock for /usr/local/lib/node_modules/.staging npm info lifecycle extractdeps@1.0.0~preuninstall: extractdeps@1.0.0 npm info lifecycle extractdeps@1.0.0~uninstall: extractdeps@1.0.0 npm verb unbuild rmStuff extractdeps@1.0.0 from /usr/local/lib/node_modules npm info lifecycle extractdeps@1.0.0~postuninstall: extractdeps@1.0.0 npm info lifecycle extractdeps@1.0.0~preinstall: extractdeps@1.0.0 npm info linkStuff extractdeps@1.0.0 npm verb linkBins extractdeps@1.0.0 npm verb linkMans extractdeps@1.0.0 npm info lifecycle extractdeps@1.0.0~install: extractdeps@1.0.0 npm info lifecycle extractdeps@1.0.0~postinstall: extractdeps@1.0.0 npm verb unlock done using /Users/hagen/.npm/_locks/staging-3a08f0df5026584d.lock for /usr/local/lib/node_modules/.staging + extractdeps@1.0.0 updated 1 package in 0.764s npm verb exit [ 0, true ] npm info ok 

但执行失败:

 $ extractdeps -bash: extractdeps: command not found 

如果我像其他工具一样的笑话 ,它完美的作品:

 $ jest -bash: jest: command not found $ npm install -g jest /usr/local/bin/jest -> /usr/local/lib/node_modules/jest/bin/jest.js $ jest -v No tests found 

我在这里错过了什么?

所以,我刚刚在全球安装了这个软件包,并注意到了同样的事情 我想知道你是否需要在你的package.json指定一个"bin"标志。 它看起来像是安装模块,但它不知道要添加到/usr/local/bin

例如,在grunt-cli package.json中:

 "bin": { "grunt": "bin/grunt" }, 

更新:做了一些研究,确实看起来是这个问题。 https://docs.npmjs.com/files/package.json#bin

基本上,当你指定这个标志并进行全局安装时,npm会在你的本地bin中创build一个符号链接,以指定你指定的cli入口点。