2015-03-19 108 views
0

我有一個小的node.js應用程序「doto」,我想要npm link,這樣我就可以在任何地方撥打doto。由於我的理解,我需要做的是:npm鏈接後找不到命令

mkdir doto 
cd doto 
npm init #call the project doto and entry point doto.js 
touch doto.js #fill with some code 
npm link 

node doto.js工作得很好,但是當我聯繫包和嘗試調用doto,命令沒有找到。鏈接進行得很好,我必須使用sudo(是的,我知道我應該設置節點,我不需要sudo,但現在我只想讓我的腳溼)

每當我安裝一個軟件包全局,我可以稱它爲好。

我正在運行mac os 10.10。

doto.js

#!/usr/bin/env node 

var path = require('path'); 
var pkg = require(path.join(__dirname, 'package.json')); 

var program = require('commander'); 

program 
    .version(pkg.version) 
    .option('-p, --port <port>', 'Port on which to listen to (defaults to 3000)', parseInt) 
    .parse(process.argv); 

console.log(program.port); 

的package.json

{ 
    "name": "doto", 
    "version": "0.0.1", 
    "description": "", 
    "main": "doto.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "commander": "~2.7.1" 
    } 
} 

我缺少什麼?

回答

3

我覺得你package.json缺少倉部分,according to the docs應該成爲這樣的:你已經運行sudo npm link

{ 
    "name": "doto", 
    "version": "0.0.1", 
    "description": "", 
    "main": "doto.js", 
    // specify a bin attribute so you could call your module 
    "bin": { 
    "doto": "./doto.js" 
    }, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "commander": "~2.7.1" 
    } 
} 

所以,你可以在任何地方運行doto,如果你想改變的名稱可執行文件只需將「bin」下的密鑰更改爲您喜歡的任何內容即可。

+0

看,有時候我覺得很蠢:)謝謝! – rootman 2015-03-19 11:22:15

+0

我很高興幫助; D不要忘記請upvote。 – 2015-03-19 11:23:40

+0

謝謝!!這是我的最愛! :d – Mihir 2017-07-05 09:31:15