【问题标题】:Possible to include a command-line in a Node module without global install?可以在没有全局安装的节点模块中包含命令行吗?
【发布时间】:2013-11-24 21:11:54
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我从不使用-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 ...

    【讨论】:

    • 谢谢你,完美的回应。我认为您的意思是 npm install less 。 (lessc 是 cli 的名称)
    • 无论是全局安装还是本地安装,每次都会创建一个可执行文件。在后一种情况下,您只需要修改 PATH。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多