noge-gyp构建项目踩坑记录

news2024/9/28 13:16:04
开发环境
系统: win11
node: 19.7.0
npm: 8.3.2
node-gyp: 10.0.2

可以不使用windows-build-tools来安装构建工具,手动进行安装

我这边用windows-build-tools安装时候会提示

'process.env' only accepts a configurable, writable, and enumerable data descriptor.

查了资料后加上dd_clint.log这个文件也没有用

再加上这个构建工具中用的Python还是2.7版本的,太旧了,所以选择手动安装构建工具

1、安装Visual Studio 2022

需要勾选"使用C++的桌面开发",“MSVC v143 - VS 2022 C++ x64/x86 生成工具(最新)”,“Windows 11 SDK(10.0.22000.0)”,这个SDK后面的数字怎么选下面会介绍
image-20240829101649626
image-20240829101743932
image-20240829102020482

查看Windows版本

在搜索栏输入"系统信息"

image-20240829102242367
image-20240829102232006

我的系统是Win11,版本是10.0.22000,对应的SDK就是Windows 11 SDK(10.0.22000.0)

设置环境变量

下载完后添加环境变量VCINSTALLDIR,路径设置图中这个

image-20240829102523310

2、安装node-gyp

安装命令:npm install -g node-gyp

因为我用的是nvm来管理多个nodejs,安装完后找不到node-gyp,还需要加上环境变量(我的电脑>右键>属性>高级系统设置>环境变量>系统变量>Path>编辑>新建)

E:\nvm\v19.7.0\node_global

3、node-gyp构建模块

默认node-gyp下载编译需要的头文件是从nodejs官网下载的经常会因为网络问题下载失败。

FetchError: request to https://nodejs.org/download/release/v19.7.0.....

可以在npmrc中设置

disturl = "https://npmmirror.com/mirrors/node"

或者在执行node-gyp命令的时候加上以下参数

--disturl=https://npmmirror.com/mirrors/node

通过淘宝的镜像网站下载头文件,可能某些版本node的头文件淘宝镜像没有,可以从其他网站镜像寻找配置

开始构建模块

node-gyp configure --disturl=https://npmmirror.com/mirrors/node

问题1:msvs_version not set,VCINSTALLDIR not set,not found Visual Studio

执行指令

npm config set msvs_version 2022
set VCINSTALLDIR <Visual Studio安装路径>

执行完一定要检查一下

$ npm config get msvs_version
2022
$ echo %VCINSTALLDIR%
E:\Microsoft Visual Studio\2022\Community\VC
问题2:msvs_version not set,VCINSTALLDIR not set,not found Visual Studio

大意是msvs_version变量取到了,但是VCINSTALLDIR 还是没有set。

解决办法:

  1. 手动设置系统的环境变量(我的电脑>右键>属性>高级系统设置>环境变量>新建系统变量)
  2. vscode所属的terminal,echo %VCINSTALLDIR%返回的值都不符合预期。
    但windows自带的cmd.exe是可以取到VCINSTALLDIR的值。
问题3:unknown version “undefined” found

node-gyp寻找Visual Studio的文件是下面这个

E:\nvm\v19.7.0\node_global\node_modules\node-gyp\lib\find-visualstudio.js

用vscode打开,加入以下代码后调试运行(勾选上捕获异常)

debugger;
// 第一个参数是node的版本
// 第二个参数是Visual Studio的版本
findVisualStudio('19.7.0', '2022', (result) => { 
   console.log(result); 
});

image-20240829105440267

查找Visual Studio命令的构建在findNewVS这个函数下,最后发现是执行命令报错,导致JSON.parse(stdout),这一行命令在解析的时候出现问题

手动把构建的命令复制出来,在PowerShell执行发现是从环境变量中的用户变量lib读取到了不存在的路径

E:\Microsoft Visual Studio\VC98\mfc\lib
E:\Microsoft Visual Studio\VC98\lib

这个是因为我之前安装过Visual C++,后续文件夹删除了,但是环境变量没有删除,导致node-gyp寻找Visual Studio时出错,所以将环境变量删除即可

问题4:does not match this Visual Studio Command Prompt

解决办法1: 在 C:\Users\Admin\.npmrc (找不到这个文件的用Everything搜一下)文件中添加上msvs_version=2022

我的.npmrc文件设置如下

cache=E:\nodejs\node_cache
msvs_version=2022
node_gyp=E:\nodejs\node_global\node_modules\node-gyp\bin\node-gyp.js
prefix=E:\nodejs\node_global
registry=https://registry.npm.taobao.org/
sass_binary_site=https://npmmirror.com/mirrors/node-sass
strict-ssl=false

解决办法2: 在构建的时候加上 --msvs_version=2022,比如:node-gyp configure --msvs_version=2022

问题5:Could not find any Visual Studio installation to use

在安装了Windows11 SDK后出现这个问题是因为node-gyp没有找到Windows11 SDK

node-gyp寻找SDK的文件是下面这个

E:\nvm\v19.7.0\node_global\node_modules\node-gyp\lib\find-visualstudio.js

里面有一个函数getSDK,将其修改即可

// Helper - process Windows SDK information
  getSDK (info) {
    const win8SDK = 'Microsoft.VisualStudio.Component.Windows81SDK'
    const win10SDKPrefix = 'Microsoft.VisualStudio.Component.Windows10SDK.'
    const win11SDKPrefix = 'Microsoft.VisualStudio.Component.Windows11SDK.'

    let Win10or11SDKVer = 0
    info.packages.forEach((pkg) => {
      if (!pkg.startsWith(win10SDKPrefix) && !pkg.startsWith(win11SDKPrefix)) {
        return
      }
      const parts = pkg.split('.')
      if (parts.length > 5 && parts[5] !== 'Desktop') {
        this.log.silly('- ignoring non-Desktop Win10/11SDK:', pkg)
        return
      }
      const foundSdkVer = parseInt(parts[4], 10)
      if (isNaN(foundSdkVer)) {
        // Microsoft.VisualStudio.Component.Windows10SDK.IpOverUsb
        this.log.silly('- failed to parse Win10/11SDK number:', pkg)
        return
      }
      this.log.silly('- found Win10/11SDK:', foundSdkVer)
      Win10or11SDKVer = Math.max(Win10or11SDKVer, foundSdkVer)
    })

    if (Win10or11SDKVer !== 0) {
      return `10.0.${Win10or11SDKVer}.0`
    } else if (info.packages.indexOf(win8SDK) !== -1) {
      this.log.silly('- found Win8SDK')
      return '8.1'
    }
    return 

参考资料:

  1. https://juejin.cn/post/7132125416034140173
  2. https://stackoverflow.com/questions/70315519/node-gyp-error-could-not-find-any-visual-studio-installation-to-use
  3. https://blog.csdn.net/qq_36888550/article/details/133287592
  4. https://blog.csdn.net/jhlovett/article/details/3969791
  5. https://github.com/nodejs/node-gyp/pull/2565
  6. https://juejin.cn/post/7042123168722452516

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计者模式之访问者模式

1.访问者模式概述 允许你在不改变对象结构中的元素类的前提下&#xff0c;向对象结构中的元素增加新的行为。这种模式将数据结构与作用于结构上的操作分离&#xff0c;从而使得我们可以独立地改变数据结构和操作。 2.访问者模式的组成部分 1&#xff09;Visitor&#xff08;访…

Mysql基础练习题 595.大的国家 (力扣)

如果一个国家满足下述两个条件之一&#xff0c;则认为该国是 大国 &#xff1a; 面积至少为 300 万平方公里&#xff08;即&#xff0c;3000000 km2&#xff09;&#xff0c;或者 人口至少为 2500 万&#xff08;即 25000000&#xff09; 编写解决方案找出 大国 的国家名称、…

可视耳勺有没有实用性?揭露五大隐患套路!

随着科技的进步&#xff0c;很多人着重关注自己的个护健康&#xff0c;传统挖耳勺的盲目操作引起鼓膜受损的操作屡见不鲜&#xff0c;很多人摈弃传统挖耳勺&#xff0c;选择了更加直观挖耳的可视耳勺&#xff0c;它能通过高清内窥镜进入耳朵实时反映耳道的情况&#xff0c;受到…

无人机飞手执照,合法飞行不得不考的证

无人机飞手执照&#xff08;也称为民用无人驾驶航空器系统驾驶员合格证或遥控航空模型飞行员执照&#xff09;在特定情况下是合法飞行所必需的。以下是关于无人机飞手执照的详细解答&#xff1a; 一、无人机飞手执照的必要性 1. 法规要求&#xff1a;根据《民用无人驾驶航空器…

【安当产品应用案例100集】013-安当透明加密组件实现企业网盘数据安全存储

企业数据存储是企业运营中一个复杂关键的过程&#xff0c;它涉及多个方面&#xff0c;包括选择合适的存储解决方案、实施数据备份与恢复策略、确保数据安全以及优化存储性能等。 本案例中&#xff0c;我们将以企业网盘文件存储和共享为例&#xff0c;介绍一下办公场景和出差场…

html2canvas、pdf-lib、file-saver将html页面导出成pdf

html2canvas、pdf-lib、file-saver将html页面导出成pdf 项目背景 需要根据用户的账号信息&#xff0c;生成一个pdf报告发给客户&#xff0c;要求报告包含echart饼图、走势图等。 方案 使用html2canvas&#xff0c;将页面转成图片&#xff0c;再通过pdf-lib将图片转成pdf文件…

食家巷一窝丝:匠心传承的美味传奇

在美食的广袤天地中&#xff0c;有一种独特的存在 —— 食家巷一窝丝。它不仅仅是一道美食&#xff0c;更是一种文化的传承&#xff0c;一段历史的记忆。食家巷一窝丝&#xff0c;以其精湛的制作工艺和独特的口感令人陶醉。每一根丝都细如发丝&#xff0c;均匀整齐&#xff0c;…

基于CW2217B的库仑计硬件设计

一、CW2217简介: CW2217B是一款适用于穿戴设备的超低功耗锂电池电量计芯片。芯片监测电池在充放电状态下的电压,电流和温度,运行专利“FastCali”电量计算法,结合电池建模信息,可准确计算电池的剩余电量。CW2217B适用于包括锂锰,锂钴和聚合物等多种类型的锂电池应用。 …

fastadmin 列表显示渲染图片

想把地址显示成图片 在对应的js文件里加上这句话 formatter: Table.api.formatter.image 如果想点击图片列可以看图片的大图&#xff0c;则需要加上 events: Table.api.events.image 效果 Table.api.formatter Table.api.formatter封装了许多FastAdmin表格列表中常用的单元…

从入门到精通:TEMU商家如何利用自养号测评打造爆款

TEMU平台以其独特的魅力和无限潜力&#xff0c;吸引着众多商家竞相入驻。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何快速提高销量&#xff0c;成为摆在每位商家面前的重大课题。本文将深入剖析一种高效且具策略性的方法——精细化自养号测评&#xff0c;帮助TEMU商家…

比较器(过零/非过零检测+噪声的影响+滞回+输出限幅+窗口比较器)

2024-8-30&#xff0c;星期五&#xff0c;7:25&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天周五啦&#xff0c;终于可以休息了&#xff0c;也祝大家周末快乐&#xff0c;玩的开心&#xff01;。 今天开始了第八章基本运算放大器电路的学习&#xff0c…

Python计算机视觉 第6章-图像聚类

Python计算机视觉 第6章-图像聚类 6.1 K-means聚类 K-means 聚类 是一种常用的无监督学习算法&#xff0c;用于将数据集划分为 ( K ) 个簇。 算法步骤 选择 ( K ) 个初始簇中心&#xff08;可以是随机选择或其他启发式方法&#xff09;。将每个数据点分配到距离其最近的簇…

排查C++程序CPU异常占用方法

如果服务器资源允许可以考虑一些CPU资源占用工具&#xff0c;例如Perf、SystemTap。 服务器资源不允许的情况下可以使用GDB调试。 步骤如下&#xff1a; 1、使用top查看CPU高占用的程序&#xff0c;记下它的进程ID&#xff1b; 2、多线程服务排查时&#xff0c;需要排查对应…

案例分享 | Digimat应用于金属材料的仿真

Digimat——应用于金属材料的仿真 Digimat是一款专注于多尺度复合材料非线性材料本构预测和材料建模的商用软件包。Digimat能够帮助用户预测多相材料的宏观性能&#xff0c;支持的材料范围涉及包含连续纤维、长纤维、短纤维、纤维编织、晶须、颗粒、片层等所有增强相和包括树脂…

代理IP设置白名单:让你的网络更安全高效

在网络世界中&#xff0c;代理IP不仅能帮助我们提升网络速度、保护隐私&#xff0c;还能通过设置白名单来进一步增强网络的安全性和稳定性。本文将详细介绍代理IP设置白名单的方法和注意事项&#xff0c;让你在使用代理IP时更加得心应手。 什么是代理IP白名单&#xff1f; 代…

11款主流图纸加密软件盘点,图纸加密软件大盘点

在数字化时代&#xff0c;图纸作为企业核心知识产权的重要组成部分&#xff0c;其安全保护显得尤为重要。随着技术的发展&#xff0c;越来越多的图纸加密软件应运而生&#xff0c;为企业提供了多样化的安全解决方案。以下是11款主流图纸加密软件的详细介绍&#xff0c;它们各自…

Linux基础知识(一、什么是Linux)

一、Linux之父——林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09; Linux操作系统最初是在1991年10月份由芬兰赫尔辛基大学的在校生Linus Torvalds所发布,最初被发布的LINUX0.02版本因其高质量的代码与开放源代码&#xff0c;迅速引起了一大批黑客的加…

空间旋转与四元数

参考资料&#xff1a;https://krasjet.github.io/quaternion/quaternion.pdf 一、二维空间与复数 已知复数 z a b i zabi zabi&#xff0c;我们规定其向量表示形式为 [ a b ] \left [ \begin{matrix}a\\b\end{matrix}\right ] [ab​]。我们可以将其看成是复数域的两个基底 {…

【生日视频制作】美女举牌变魔术卡牌AE模板修改文字软件生成器教程特效素材【AE模板】

美女举牌变魔术卡牌生日视频制作教程AE模板改字软件生成器素材 怎么如何做的【生日视频制作】美女举牌变魔术卡牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

活动|华院计算惊艳亮相第十届博博会,以AI驱动数智文博

2024年8月23日至26日&#xff0c;第十届“中国博物馆及相关产品与技术博览会”&#xff08;以下简称“博博会”&#xff09;花落草原都市内蒙古自治区呼和浩特市敕勒川国际会展中心。“博博会”自2004年创办以来&#xff0c;已成功在多个城市举办&#xff0c;成为我国文博界最具…