【问题标题】:Can my NPM CLI package be executed on CMD without installing globally?我的 NPM CLI 包可以在 CMD 上执行而无需全局安装吗?
【发布时间】:2021-08-13 03:17:41
【问题描述】:

我写了一个 NPM 包,它有自己的 CLI 命令。

让我们将该包命名为 xyz 并想象它现在可以在 npmjs.com 上使用

所以,假设用户通过运行npm install xyz 在他的项目中安装了这个包。

现在他想在他的项目中的终端上运行xyz 包提供的 CLI 命令。

xyz do_this

这可以在不由用户全局安装此软件包的情况下完成吗?还是无需对用户进行任何进一步的配置?

这是 xyz 包的 package.json 的一部分。

{
  "name": "xyz",
  "version": "1.0.0",
  "description": "Description",
  "main": "index.js",
  "preferGlobal": true,
  "bin": "./index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
........

【问题讨论】:

    标签: javascript node.js npm npx package-development


    【解决方案1】:

    npm 的工作原理如下。当你在本地目录中安装一个包时,它会在 package.json 文件夹内的 node_modules 中安装可执行依赖文件,但如果你使用 --global,它会将其全局放置在用户设置路径的位置。 例如,当我运行npm install http-server 时,我的可执行文件以./node_modules/http-server/bin/http-server 结束,但是当我在全局安装它时,我将它作为node_modules/http-server/bin

    解决这个问题的方法是,如果您只想运行可执行文件,只需像 ./node_modules/http-server/bin/http-server 那样在内部执行它。如果您希望它作为命令,您还需要让用户将目录添加到他们的路径中,以便当用户输入命令时,计算机会在该文件夹中查找命令。 这是在 Linux 中添加 PATH 目录的指南,您只需添加目录 /pathtofolder/node_modules/http-server/bin/ 或任何您的文件夹。 https://linuxize.com/post/how-to-add-directory-to-path-in-linux/

    例如,如果我想将本地文件夹中的 http-server 添加到我的路径中,我会运行

    export PATH="/pathtofolder/node_modules/http-server/bin/:$PATH"

    祝你好运!让我知道如何为您提供帮助!

    【讨论】:

    • 非常感谢!那么,如果我想要它作为命令,用户必须更新 PATH 还是全局安装它?如果他从项目文件夹中调用它,他需要运行类似./node_modules/http-server/bin/http-server 的命令?我希望我明白了。
    • 既然我想把它作为一个命令,比如sequelize db:migrate,我应该在包自述文件中提到,用户需要全局安装它吗?否则,用户更新他的 PATH 或使用完整路径调用它不是一个方便的命令。
    • 没错,你不会想让用户手动将它添加到路径中,它真的很复杂而且没用。让用户运行npm install --global xyz 可能是最好的解决方案。我希望这有帮助!如果您认为我的解决方案是正确的,请按解决方案图标旁边的大复选标记,随时接受我的答案作为解决方案! :)
    • 嗨塔林杜!我知道这已经很长时间了,但我刚刚发现了一些东西。您可以在不全局安装的情况下运行命令行包。还有2种方法。首先,安装npm install -g npx,然后运行 ​​node_modules 中的npx <command>。那将尝试运行它。另一种方法是在 package.json 中运行脚本,只需像 http-server 一样引用它,不需要全局标志。祝你好运!
    猜你喜欢
    • 2018-11-29
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多