npm 安装不存在的节点-sass

npm installing nonexistent node-sass

我们有一个项目正在从 node-sass 升级到 sass。我们从 package.json.

中移除了对 node-sass 的依赖

npm install 在节点 v15 (npm v7.7.6) 下工作,但在节点 v16 (npm v8.7.0) 下失败。

失败

npm info run node-sass@4.14.1 postinstall

正在尝试编译 libsass。

npm ERR! npm ERR! command sh -c node scripts/build.js npm ERR! npm ERR! Building: /Users/.../.nvm/versions/node/v16.14.2/bin/node /Users/.../.npm/_cacache/tmp/git-clonewTBZbR/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library= npm ERR! npm ERR! c++ '-DNODE_GYP_MODULE_NAME=libsass'...

我知道 node-sass 和 libsass 非常依赖节点版本。我想不通的是这种依赖性是从哪里来的。

如果我切换到节点 15 并安装(创建 node_modules),我发现:

npm ls node-sass 显示(空)

find . -type d -name 'node-sass' 找不到这样的目录(与 libsass 相同)

使用 ack --noignore-dir=node_modules node-sass 递归地搜索“节点-sass”的 node_modules 仅显示 devDependencies 和 peerDependencies(例如 sass-loader 的可选)。使用 --legacy-peer-deps 安装没有帮助。

我试过使用 --loglevel silly 安装,但没有看到任何更多相关信息。

如何确定试图安装此依赖项的是什么?

我发现了问题(这是一个使用旧版本 node-sass 并使用 git+ssh 导入的私人公司包)。

技术:

  1. 在新文件夹中,运行 npm init -y
  2. 从有问题的项目中一次复制 dependencies/devDependencies 一个块(你也可以 npm i 这些单独的,但你必须 @ 相同的版本,这可能需要更长的时间)
  3. 添加每个依赖块后,运行 npm i(或 npm i --legacy-peer-deps 如有必要)
  4. 可选 git init 文件夹(带 .git 忽略 node_modules)并在每次更改后提交,以便更容易还原
  5. 从第 2 步开始重复,直到出现错误

我对哪些包可能是罪魁祸首做出了一些有根据的猜测,因此我可以一次测试多个依赖项。

最后我把它缩小到一个包。添加它导致错误。

另一种选择是一个一个地删除包(假设您的项目受源代码控制)并尝试在每个包之后安装。