我的 NPM CLI 包可以在不全局安装的情况下在 CMD 上执行吗?

Can my NPM CLI package be executed on CMD without installing globally?

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

让我们将该包命名为 xyz 并假设它现在可以在 npmjs.com

上使用

所以,假设用户通过 运行ning 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": {
........

这是 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"

祝你好运!让我知道我可以如何帮助你!