当前位置: 首页 > news >正文

npm install ffi各种失败,换命令npm i ffi-napi成功

网上各种帖子安装ffi,基本上到了windows build tools这里会卡住。 

使用命令npm install --global --production windows-build-tools

安装报错信息如下:

PS E:\codes\nodejsPath\tcpTest> npm install --global --production windows-build-tools
npm WARN config production Use `--omit=dev` instead.
npm WARN deprecated windows-build-tools@5.2.2: Node.js now includes build tools for Windows. You probably no longer need this tool. See https://github.com/felixrieseberg/windows-build-tools for details.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See c.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm ERR! code 1
npm ERR! path C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node ./dist/index.js
Downloading python-2.7.15.amd64.msi
npm ERR! [============================================>] 100.0% (0 B/s)
npm ERR! Downloaded python-2.7.15.amd64.msi. Saved to C:\Users\aaaa\.windows-build-tools\python-2.7.15.amd64.msi.
Downloading vs_BuildTools.exe
npm ERR! [============================================>] 100.0% (0 B/s)
npm ERR! Downloaded vs_BuildTools.exe. Saved to C:\Users\aaaa\.windows-build-tools\vs_BuildTools.exe.
npm ERR!
npm ERR! Starting installation...
npm ERR! Downloading installers failed. Error: TypeError: 'process.env' only accepts a configurable, writable, and enumerable data descriptor
npm ERR!     at Function.defineProperty (<anonymous>)
npm ERR!     at Object.removePath (C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools\dist\utils\remove-path.js:11:12)
npm ERR!     at Object.install (C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools\dist\install\index.js:29:19)
npm ERR!     at C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools\dist\start.js:17:19
npm ERR!     at Object.download (C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools\dist\download.js:35:5)
npm ERR!     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
npm ERR!     at async Object.aquireInstallers (C:\Users\aaaa\AppData\Roaming\npm\node_modules\windows-build-tools\dist\aquire-installers.js:32:13) {
npm ERR!   code: 'ERR_INVALID_OBJECT_DEFINE_PROPERTY'
npm ERR! }
npm ERR! windows-build-tools will now exit.

npm ERR! A complete log of this run can be found in: C:\Users\aaaa\AppData\Local\npm-cache\_logs\2023-08-14T13_44_54_835Z-debug-0.log
PS E:\codes\nodejsPath\tcpTest>

0.需要ffi正常工作的核心python,c++编译环境

ffi要正常工作的根本原理是需要正确的python版本和c++编译的tools

经过反复折腾,开发环境很容易被整的乱七八糟。所以先清理干净环境再用命令去跑。

1.卸载node,准备降低版本,清理干净各种环境 

这个错误尝试降低nodejs版本。我是用的是当前最新的版本node-v18.17.1,可能存在版本的不兼容或者bug之类的问题。我降低到node-v17.9.1-x64

另外电脑里不能有python的其他版本,清理干净。包括环境变量。如果在报错之前还做了大量尝试,最好把这些缓存都清理干净。包括c盘用户目录下,一般会生成一个node的环境配置文件

C:\Users\aaaa\.node_repl_history

C:\Users\aaaa\AppData\Local\npm-cache

C:\Users\aaaa\AppData\Roaming\npm

这些需要删掉,避免环境配置下次安装好又读取进来了,或者因为看了各种帖子,操作乱了。

2.安装低版本的node

前面准备好后,开始安装node-v17.9.1-x64,安好后,先确认npm环境,看看是否干净如初,没有被自己改的乱七八糟的配置

 npm config get

3.安装node-gyp 

npm install -g node-gyp

 4.用管理员权限,安装windows-build-tools

npm install --global --production windows-build-tools

 它会一直卡在这里。按ctrl+c,强制终止,看到报错信息如下

 原来是它安装到Visual Studio Build Tools的时候开始没反应了

 

根据日志前面提到的downloaded路径去看,的确有成功下载visual studio build tools。由于本人电脑有安装更高版本的vs开发工具,我怀疑是有冲突或者在下载什么vs的工具包,里面报错没有反馈出来。于是我打开下载好的文件夹,手动安装visual studio build tools

 

手动安装能成功

 但是,即便如此,还是不能正常npm install ffi。后面查了些资料,有一个说的特别明白。因为ffi用到了v8的一些接口,v8后面接口改了。所以直接用ffi跑不起来。

npm install ffi命令换成npm i ffi-napi。说是ffi-napi做了修正。

再项目文件夹下执行命令,安装成功。

 5.测试dll

js代码如下:

const ffi = require("ffi-napi");const libm = ffi.Library("test.dll", {"Add": ["int", ["int","int"]]
});console.log(libm.Add(1,5));

用go语言写了一个简单的测试代码,生成.h头文件和.dll文件

//go语言代码,可以用c++,c#等自行实现
package mainimport "C"//export Add
func Add(numberA int, numberB int) int {return numberA + numberB
}func main() {}

运行效果:

 

http://www.lryc.cn/news/131142.html

相关文章:

  • 0.flink学习资料
  • C语言:字符函数和字符串函数
  • 基于.Net Core开发的医疗信息LIS系统源码
  • 部署工业物联网可以选择哪些通信方案?
  • flutter-移动端适配
  • MySQL 常用函数
  • 动态路由的实现—正则表达式
  • Android实现超出固定行数折叠文字“查看全文“、“收起全文“
  • Python上楼梯问题:递归解法探究(斐波那契变种)(记忆化递归)
  • AI重新定义音视频生产力“新范式”
  • Jmeter生成可视化的HTML测试报告
  • 5G技术与其对智能城市、物联网和虚拟现实领域的影响
  • leetcode做题笔记88. 合并两个有序数组
  • stm32开关控制led灯泡(附Proteus电路图)
  • win10 wsl ubuntu 更换版本为18.04 apt换国内源Python换国内源;默认root
  • C++ Primer 第1章 开始
  • 【STM32 学习】电源解析(VCC、VDD、VREF+、VBAT)
  • C语言实例_解析GPS源数据
  • LVS+Keepalived
  • uni-app根据经纬度逆解析详细地址
  • 【数据结构】吃透单链表!!!(详细解析~)
  • Linux 安全技术和防火墙
  • Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)
  • 基于深度学习的铁路异物侵限检测算法研究_整体认知感觉欠点意思,但是有一个新的变形卷积-Octave 卷积
  • Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限
  • 2023.8 - java - 变量类型
  • 【Kubernetes】Kubernetes的Pod控制器
  • Ubuntu20.04安装Nvidia显卡驱动教程
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!
  • AI 绘画Stable Diffusion 研究(十二)SD数字人制作工具SadTlaker插件安装教程