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

Chr*_*son 7 path command-line-interface node.js npm

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

    "bin": {
        "generate": "./bin/generate.js"
    }
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

mač*_*ček 11

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

# add this to ~/.bashrc, ~/.zshrc, or ~/.profile, etc
export PATH="./node_modules/.bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

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


例如,less通常安装

npm install -g less
Run Code Online (Sandbox Code Playgroud)

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

cd my_node_module
npm install --save less
lessc less/style.less css/style.css
Run Code Online (Sandbox Code Playgroud)

没有PATH修改,你会看到

command not found: lessc
Run Code Online (Sandbox Code Playgroud)

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

cd my_node_module
npm install --save lessc
./node_modules/.bin/lessc a.less a.css
Run Code Online (Sandbox Code Playgroud)

耶,没有了 npm install -g ...