首页 > 解决方案 > 我的 NPM CLI 包可以在 CMD 上执行而无需全局安装吗?

问题描述

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

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

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

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

xyz do_this

这可以在不由用户全局安装此软件包的情况下完成吗?或者没有任何进一步的用户配置?

这是package.jsonxyz 包的一部分。

{
  "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": {
........

标签: javascriptnode.jsnpmnpxpackage-development

解决方案


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

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


推荐阅读