我的NPM CLI程序包可以在CMD上执行而无需全局安装吗



我编写了一个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": {
........

以下是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服务器从本地文件夹添加到我的路径中,我会运行

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

祝你好运!让我知道我能帮你什么!

正如上面的注释中所给出的,最简单的方法是在本地安装所需的包,如

$ node install [@<scope>/]<package>

并在以后使用同一目录中的npx运行该命令

$ npx <package/command>

我们在构建系统中这样做是为了避免全局安装及其权限问题。

相关内容

  • 没有找到相关文章

最新更新