2013-11-24 32 views
7

我有一个小的Node模块,其中包含bin目录中的命令行脚本。可能在没有全局安装的情况下在Node模块中包含命令行?

"bin": { 
     "generate": "./bin/generate.js" 
    } 

generate.js脚本可以正常执行。

这一切工作正常,如果我运行npm install -g。但我不想全局安装,只有命令generate在模块文件夹内工作。如果我从模块文件夹运行npm install,它会正确安装node_modules子目录中的所有依赖项。但是从命令generate就好像给了我“没有这样的文件或目录”。

Thx。

回答

11

我从来不使用-g安装节点模块。我对你的问题的解决方案是把它添加到我的$PATH

# add this to ~/.bashrc, ~/.zshrc, or ~/.profile, etc 
export PATH="./node_modules/.bin:$PATH" 

现在,只要你在你的模块的根,你可以访问已安装的模块的任何二进制文件。


举个例子,less通常与

npm install -g less 

安装。但是,如果你有上述修改您的路径,你可以像这样

cd my_node_module 
npm install --save less 
lessc less/style.less css/style.css 

不带路径修改,你会看到

command not found: lessc 

如果你不喜欢改变你的PATH,您可以访问二进制直接

cd my_node_module 
npm install --save lessc 
./node_modules/.bin/lessc a.less a.css 

耶,没有更多的npm install -g ...

+1

谢谢你,完美的回应。我认为你的意思是npm安装较少。 (Lessc是cli的名字) –

+0

你是对的;已更新 –

+1

无论是全局还是本地安装,每次都会创建一个可执行文件。在后一种情况下,您只需修改PATH。 – KShirish

相关问题