NPM 7 workspace模式安装依赖执行找不到sentry-cli

简介: 搜遍了谷歌还有相关Github Repo Issues都没有,npm workspace的资料都不多,有个别都是yarn workspace说什么安装依赖异常,换成国内的淘宝源啊,来来去去都说什么源找不到,一顿操作猛如虎,问题还是没有解决。只能自己摸索了,我的解决姿势感觉应该是全网第一例!

网络异常,图片无法展示
|


前言


搜遍了谷歌还有相关Github Repo Issues都没有,


npm workspace的资料都不多,


有个别都是yarn workspace说什么安装依赖异常,


换成国内的淘宝源啊,来来去去都说什么源找不到,


一顿操作猛如虎,问题还是没有解决。


只能自己摸索了,我的解决姿势感觉应该是全网第一例!


系统环境


  • Mac OS
  • Node 14.16.1
  • NPM 7.12.1
  • @sentry/cli 1.64.2


问题列表


sentry-cli ENOENT


ERROR in Sentry CLI Plugin: spawn /workspace/project/node_modules/@sentry/cli/sentry-cli ENOENT
=


not installed by @sentry/cli


error: sentry-cli was not installed by @sentry/cli install script 
=


挣扎的姿势


.npmrc配置源


sentrycli_cdnurl=https://npm.taobao.org/mirrors/sentry-cli/
=


治标不治本,因为在单体模式下(非workspace)下,


走淘宝源安装是可以顺利且挺快的。。。


npm 7 workspace下还是找不到。


node_modules只装了一个残缺版本的@sentry/cli,


里面缺失sentry-cli这个(根据系统类型的二进制执行文件)。。


在主项目强装


# 就是清除缓存和强制安装,删除大法。。都试过。。
# 没啥用,
npm cache clean --force
rm -rf node_modules yarn.lock package-lock.json
npm install @sentry/cli  --force --legacy-peer-deps
# 为毛要--legacy-peer-deps
# 因为不是对等依赖的子包,常规的install会抛出如下异常
# ERESOLVE unable to resolve dependency tree


安装最新包


解决了这个问题,


error: sentry-cli was not installed by @sentry/cli install script 


最终解决(过渡方案)


我跑到node_modules/@sentry/cli区域,


发现他提供了安装脚本,顺势执行了一波。。


# exec
# 我发现里面的逻辑就是判定当前使用什么系统,下载对应的二进制
node ./node_modules/@sentry/cli/scripts/install.js
# 果然执行完毕。。sentry-cli回来了。。
# 验证
./node_modules/.bin/sentry-cli --help
# 可以正常输出


每次手动执行去执行?NO,NO,NO。。。


生命宝贵,能自动化的还是自动化好


npm 提供了prepare的钩子,可以在install之后自动执行。


官方文档:npm scripts -> Life Cycle Scripts


package.json


"scripts": {
    "prepare": "husky install; node check-sentry.js",
  },


check-sentry.js


最直接就是往项目根目录写一个js逻辑判定文件。。


/*
* 1. 逻辑不复杂,就是执行部分shell去判定
* 2. 二进制执行凉凉进入catch逻辑
* 3. 走一遍安装逻辑(有缓存会直接命中,输出use cache ....)
* 4. 最后就是输出版本号了。。
*/ 
const { execSync } = require('child_process');
const { existsSync } = require('fs');
const { join } = require('path');
const basePath = process.cwd();
function getJoinPath(relativePath) {
  return join(basePath, relativePath);
}
const sentryCliBinPath = getJoinPath('./node_modules/.bin/sentry-cli');
const nodeModulesSentryInstallPath = getJoinPath('./node_modules/@sentry/cli/scripts/install.js');
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const SLEEP_TIME = 10000;
async function checkSentry() {
  const stdio = ['ignore', 'inherit', 'ignore'];
  if (existsSync(sentryCliBinPath)) {
    try {
      execSync(`${sentryCliBinPath} -V`, { stdio });
    } catch (error) {
      if (existsSync(nodeModulesSentryInstallPath)) {
        execSync(`node ${nodeModulesSentryInstallPath}`);
        await sleep(SLEEP_TIME);
        execSync(`${sentryCliBinPath} -V`, { stdio });
      }
    }
  }
}
checkSentry();


完结撒花,可以正常打包调用sentry上传sourcemap这些

目录
相关文章
|
2天前
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
|
4天前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
|
5月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,检查是否所有依赖都已正确安装
在清空NPM缓存后,检查是否所有依赖都已正确安装
|
3月前
|
资源调度 前端开发 JavaScript
React 安装(NPM)
10月更文挑战第6天
84 1
|
3月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,我如何检查是否所有依赖都已正确安装?
【10月更文挑战第5天】在清空NPM缓存后,我如何检查是否所有依赖都已正确安装?
|
3月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
3月前
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
1760 0
9-14|npm install --global windows-build-tools 安装太慢了,能够指定国内源
9-14|npm install --global windows-build-tools 安装太慢了,能够指定国内源
|
5月前
|
敏捷开发 缓存 前端开发
阿里云云效产品使用合集之前端打包时npm安装卡住一般是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,如何检查是否所有依赖都已正确安装
在清空NPM缓存后,如何检查是否所有依赖都已正确安装