关于nodejs-polars可选依赖安装逻辑与配置的技术咨询
关于nodejs-polars可选依赖的问题解答
问题背景
我参与的开源项目package.json中显式声明了以下依赖:
{ "name": "c-qube", "version": "0.0.1", "dependencies": { "date-fns-tz": "^2.0.0", "fast-memoize": "^2.5.2", "ioredis": "^5.3.2", "lodash": "^4.17.21", "nestjs-pino": "^3.1.2", ... "nodejs-polars": "^0.7.2", "nodejs-polars-linux-x64-gnu": "^0.7.2", ... "pg": "^8.10.0", "picocolors": "^1.0.0", "pino-http": "^8.3.3", }, }
在Mac M1(darwin/arm64)环境执行npm install时出现如下错误:
npm ERR! code EBADPLATFORM npm ERR! notsup Unsupported platform for nodejs-polars-linux-x64-gnu@0.7.4: wanted {"os":"linux","cpu":"x64"} (current: {"os":"darwin","cpu":"arm64"}) npm ERR! notsup Valid os: linux npm ERR! notsup Actual os: darwin npm ERR! notsup Valid cpu: x64 npm ERR! notsup Actual cpu: arm64 npm ERR! A complete log of this run can be found in: /Users/username/.npm/_logs/2023-07-07T08_57_21_501Z-debug-0.log
移除nodejs-polars-linux-x64-gnu后项目可正常构建运行,查看依赖树发现该包是nodejs-polars的可选依赖:
├─┬ nodejs-polars@0.7.2 │ ├── nodejs-polars-darwin-arm64@0.7.2 │ ├── UNMET OPTIONAL DEPENDENCY nodejs-polars-darwin-x64@0.7.2 │ ├── UNMET OPTIONAL DEPENDENCY nodejs-polars-linux-arm64-gnu@0.7.2 │ ├── UNMET OPTIONAL DEPENDENCY nodejs-polars-linux-x64-gnu@0.7.2 │ ├── UNMET OPTIONAL DEPENDENCY nodejs-polars-win32-ia32-msvc@0.7.2 │ └── UNMET OPTIONAL DEPENDENCY nodejs-polars-win32-x64-msvc@0.7.2
问题
- nodejs-polars是否会根据主机硬件和操作系统自动选择安装6个可选依赖中的一个,其余五个忽略?
- 开发者是否需要添加相关配置来处理这些可选依赖?
- 开发者是否需要随操作系统/硬件变更手动修改package.json?
解答
- 是的。
nodejs-polars这类带有平台特定二进制包的库,会通过npm的可选依赖机制,自动检测当前主机的操作系统和CPU架构,只安装匹配的那个平台包,其余不匹配的可选依赖会被自动忽略,不会强制安装。你在Mac M1上安装时,它自动选择了nodejs-polars-darwin-arm64,其他不匹配的平台包标记为UNMET OPTIONAL DEPENDENCY是正常现象。 - 不需要额外配置。只要不在
dependencies里显式声明某个特定平台的包(比如项目里之前加的nodejs-polars-linux-x64-gnu),npm会自动处理这些可选依赖的安装逻辑。如果之前误把平台包加到了dependencies里,移除它,只保留核心的nodejs-polars依赖即可。 - 不需要手动修改。只要
package.json里只声明核心的nodejs-polars依赖,npm会在不同平台上自动适配对应的可选依赖包,完全不需要开发者根据操作系统/硬件修改依赖列表。之前的问题就是因为错误地把Linux平台的包加到了依赖里,导致跨平台安装失败。
内容的提问来源于stack exchange,提问作者Deekshith Rathod
相关产品推荐
相关产品推荐

