我编写了一个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>
我们在构建系统中这样做是为了避免全局安装及其权限问题。