停止全局安装软件包

软件包 NPM NPX
2021-01-15 09:36:38
87 0 0

如今,大多数前端项目将涉及某种NPM软件包。有时,在浏览这些软件包的文档时,我会看到建议安装这样的软件包。

yarn global add <package>

或像这样。

npm install --global <package>

在这两个示例中,软件包都是全局安装的。这意味着您可以<package>从系统上的任何目录运行命令。

这是可行的,但是全局安装软件包有一些缺点。

  • 如果您与一组开发人员一起工作,则很难保证每个人都在运行相同的程序包。

  • 全局只能安装一个版本。如果您有依赖于包的不同版本的不同项目,这将导致问题。

在本文中,我将向您展示三种不同的方法,您可以使用这些方法来运行软件包,而不必全局安装它们。

快速设置

在本文中,我们将安装一个名为Figlet的小型CLI工具,该工具可打印ASCII艺术文字。创建一个空目录并导航到该目录。然后添加以下package.json文件:

{
  "name": "example",
  "license": "UNLICENSED",
  "dependencies": {
    "figlet-cli": "^0.1.0"
  }
}

运行yarn install或npm install(根据您的喜好)安装软件包。

注意:从现在开始,yarnandnpm命令完全相同,因此我仅列出yarn版本。

编辑$ PATH

像本地安装软件包一样运行本地安装软件包的第一种方法是编辑$PATH环境变量。该$PATH变量告诉您的系统在哪个目录中查找可执行文件。

Yarn和NPM的便捷功能之一是它们都包含一个.bin目录,node_modules该目录中包含指向所有已安装的可执行文件的符号链接。您可以轻松地将此文件夹添加到您的路径。这里的窍门是修改您的目录$PATH以包含本地 node_modules/.bin目录。这将使您可以运行任何本地NPM CLI工具,就好像它是全局安装的一样。

首先,您需要确定正在运行哪个shell。为此,您可以在CLI中键入以下内容。

echo $SHELL

如果您尚未配置自定义外壳,则可能为zsh或bash。如果是bash,请打开~/.bash_profile文件。如果是zsh,请打开~/.zshenv。如果所需文件不存在,请创建它。

接下来,将以下内容添加到底部。请注意,这./node_modules/.bin是相对路径。这意味着它将被附加到您当前所在的任何目录中。

export PATH="./node_modules/.bin:$PATH"

就是这样!重新启动外壳程序,导航到创建的目录,然后尝试运行figlet。

figlet Aww yeah

你应该看到这样的东西。很整洁的,对吧?

     _                      __   __         _
    / \__      ____      __ \ \ / /__  __ _| |__
   / _ \ \ /\ / /\ \ /\ / /  \ V / _ \/ _` | '_ \
  / ___ \ V  V /  \ V  V /    | |  __/ (_| | | | |
 /_/   \_\_/\_/    \_/\_/     |_|\___|\__,_|_| |_|


纱线运行工具

接下来是在中定义命令package.json。要添加命令,您要做的就是添加一个scripts部分,其中包含您的命令名称和您要运行的内容。在此示例中,我添加了一个aww-yeah命令。

{
  "name": "example",
  "license": "UNLICENSED",
  "dependencies": {
    "figlet-cli": "^0.1.0"
  },
  "scripts": {
    "aww-yeah": "figlet Aww Yeah"
  }
}

您可以使用运行自定义命令yarn run <command>。大多数命令也可以缩短为yarn <command>。尝试一下yarn aww-yeah!

您甚至可以将参数传递给自定义命令。尝试将ascii下面列出的命令添加到 scripts并运行yarn ascii Aww Yeah。

"scripts": {
  "aww-yeah": "figlet Aww Yeah",
  "ascii": "figlet"
}

这是一个真实的例子。我是ESLint和Jest的忠实拥护者。我的几乎所有项目都在其中定义了这些命令。

"scripts": {
  "lint": "eslint --max-warnings=0 .",
  "test": "jest"
}

这很棒,因为我和我的团队都可以共享这些命令。它们也是自我记录的,因此,如果某人是某个软件包的新手,他们可以浏览一下package.json以查看可用的命令。

NPX

最后,我们有NPX,它是NPM的打包程序。这个方便的工具使您可以运行CLI命令,而无需在本地安装软件包。这对于只需要运行一次的工具(例如生成器)非常有用。

如果已安装Node.js,则可能已在您的计算机上安装了NPX。如果没有,您可以使用进行全局安装yarn global add npx。

让我们试一下figlet。

npx figlet Aww Yeah

那不是那么容易吗?

有时,您会遇到NPX不知道如何查找的命令。我的Yeoman Generators存储库就是一个例子。在这种情况下,您需要通过-p标记来告诉NPX哪个程序包显式运行。

npx -p yo -p @landonschropp/generator-eslint yo @landonschropp/eslint

全部完成!

这就是结果。现在,你可以在本地安装任何NPM模块,并像运行全局模块一样运行该命令。我个人经常使用这三种方法。我希望你会发现它们像我一样有用!

作者介绍

用微信扫一扫

收藏