可以在没有全局安装的节点模块中包含命令行吗?

时间:2013-11-24 21:11:55

标签: node.js path command-line-interface npm

我有一个小型Node模块,其中包含bin目录中的命令行脚本。

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

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

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

THX。

1 个答案:

答案 0 :(得分:11)

我从不使用-g安装节点模块。我的解决方案是将此问题添加到我的$PATH

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

现在,只要您在模块的根目录中,就可以访问已作为模块安装的任何二进制文件。


例如,less通常与

一起安装
npm install -g less

但是,如果您按上述方法修改了PATH,则可能会出现类似

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

如果没有PATH修改,你会看到

command not found: lessc

如果您不想改变PATH,可以直接访问二进制文件

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

是的,不再是npm install -g ...