可以在我不知道的情况下“ NPM -i”本地安装全局软件包吗?

问题描述

我可以确定软件包安装的本地依赖项。但是现在我非常担心本地安装的软件包是否可以安装其他全局软件包作为依赖项。

例如:

npm安装nunjucks npm安装sqlite 要么 npm安装botkit

解决方法

不可能在package.json中将依赖项标记为全局依赖项,以便在运行npm i时将其安装在系统范围内。

此处an old comment by Isaac Schlueter指出,这将永远不会实现。

但是,编写预安装脚本以在全局范围内安装任意依赖项确实非常简单。

{
  "name": "Project","version": "1.0.0","description": "Preinstall script to install global deps","main": "index.js","scripts": {
    "preinstall": "node -e \"const {execSync} = require('child_process'); JSON.parse(fs.readFileSync('package.json')).globalDependencies.forEach(globalDep => execSync('npm i -g ' + globalDep));\""
  },"dependencies": {
    "react": "16.13.1"
  },"globalDependencies": [
    "lodash"
  ],"license": "ISC"
}

将此代码复制到PC文件夹中的package.json文件中。然后,在文件夹中运行npm i。它将在本地安装React(在node_modules文件夹中),并将在全球安装lodash。

您可以使用npm i ls -g --depth=0进行验证。

参考:Install dependencies globally and locally using package.json

关于您的问题:

npm -i(本地)可以在我不知道的情况下安装全局软件包吗?

这不是完全沉默。为上述npm i文件运行package.json时,您将看到以下输出:

> Project@1.0.0 preinstall /home/jim/Desktop/Project
> node -e "const {execSync} = require('child_process'); JSON.parse(fs.readFileSync('package.json')).globalDependencies.forEach(globalDep => execSync('npm i -g ' + globalDep));"

npm WARN Project@1.0.0 No repository field.

audited 6 packages in 1.113s
found 0 vulnerabilities

但是在大​​型项目上运行npm i时是否会抓住这一点仍有待商。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...