NPM 5.8.0执行--no-optional仍安装可选依赖chromedriver求助
我来帮你分析下这个问题——你用npm 5.8.0执行npm install --no-optional --silent,明明把chromedriver放在optionalDependencies里,结果它还是被装了,结合你给出的npm la chromedriver输出,咱们一步步排查:
1. 先确认chromedriver的依赖声明是否唯一
先打开你的package.json仔细检查:确保chromedriver只出现在optionalDependencies里,没有不小心同时写在dependencies或devDependencies中。要是它被放在常规依赖里,哪怕加了--no-optional,npm也会照常安装它。
2. 核对依赖树的实际关系
你执行的npm la chromedriver输出显示:
cdt-now@0.1.12 │ /Users/alexamil/WebstormProjects/nabisco/cdt-now │ └── chromedriver@2.35.0 ChromeDriver for Selenium git://github.com/giggio/node-ch...
这里的└──说明chromedriver是你当前项目(cdt-now@0.1.12)的直接依赖。如果你的package.json确实把它放在optionalDependencies,那可能是npm 5.8.0的版本bug导致--no-optional参数失效。不过先别急着下定论,先做下面的操作:
3. 清理缓存后重试安装
npm缓存偶尔会出问题,导致依赖安装不符合预期。执行下面的命令彻底清理后重新安装:
npm cache clean --force rm -rf node_modules package-lock.json npm install --no-optional --silent
4. 尝试升级npm版本
npm 5.8.0属于比较旧的版本,确实存在一些关于可选依赖处理的bug。你可以升级到5.x系列的最新稳定版,或者直接升级到更成熟的6.x版本,再测试安装:
# 升级到5.x最新稳定版 npm install -g npm@5.10.0 # 或者升级到6.x版本 npm install -g npm@6
5. 检查package.json的语法正确性
确保optionalDependencies的JSON格式完全正确,比如没有缺失逗号、引号不匹配这类低级错误——语法错误可能导致npm解析异常,把可选依赖当成常规依赖处理。正确的格式应该是这样的:
{ "name": "cdt-now", "version": "0.1.12", // ...其他配置 "optionalDependencies": { "chromedriver": "^2.35.0" } }
按照这个步骤排查下来,应该能找到问题所在并解决。
内容的提问来源于stack exchange,提问作者user7898461

