安装node-sass常报错,你可能需要了解下Node.js的C++扩展

278 阅读3分钟

背景

项目中使用了sass,需要安装sass-loader

sass-loader需要安装node-sass

node-sass

Node-sass是一个库,它为Node.js提供了到LibSass的绑定,LibSass是流行的样式表预处理器sass的C版本。 它允许您以惊人的速度并通过连接中间件自动将.scs文件编译为css。

node-sass与node的版本匹配:

NodeJSSupported node-sass versionNode Module
Node 209.0+115
Node 198.0+111
Node 188.0+108
Node 177.0+, <8.0102
Node 166.0+93
Node 155.0+, <7.088
Node 144.14+, <9.083
Node 134.13+, <5.079
Node 124.12+, <8.072
Node 114.10+, <5.067
Node 104.9+, <6.064
Node 84.5.3+, <5.057
Node <8<5.0<57

安装Node-sass时,gpy检查本地的node版本,再在线获取node-v16.17.1-headers.tar.gz gyp http GET https://nodejs.org/download/release/v16.17.1/node-v16.17.1-headers.tar.gz

node-v16.17.1-headers.tar.gz解压后可得到一个名为 include 的文件夹,将其放置在 C:\Program Files\nodejs 目录下(具体路径可能根据本机 Node.js 配置而有所不同)。

node-v16.17.1-headers

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境。在安装Node.js时,除了核心的Node.js运行时,还会附带安装一些头文件(headers)和库文件。这些头文件和库文件是供开发者在编译C++扩展时使用的,它们包含了Node.js核心模块的C语言接口和数据结构定义。

node-gyp

Node-gyp 是一个用于编译 Node.js 原生插件的工具。它允许开发者使用 C 或者 C++ 编写 Node.js 的原生扩展模块。Node-gyp 的主要作用是将 C/C++ 代码编译成平台相关的二进制文件,以便在 Node.js 环境中使用。

Node-gyp 是基于 Google 的 GYP(Generate Your Projects)项目生成系统构建的,它提供了一个跨平台的项目生成和构建配置系统。通过 GYP,可以生成不同平台上的构建文件,如 makefile、Visual Studio 项目文件等,从而使得跨平台编译变得更加容易。

使用 Node-gyp,开发者可以在 Node.js 中调用 C/C++ 库,从而实现更高性能的计算或者访问底层操作系统的功能。例如,可以使用 Node-gyp 来编写一个图像处理的库,或者一个网络通信的模块。

node-gyp需要安装对应版本的python和Visual C++构建环境。

Node.js 的 C++ 扩展

Node.js 的 C++ 扩展是一种强大的机制,允许开发者使用 C++ 代码来扩展 Node.js 的功能。这种机制主要是通过编写 C++ 插件,然后将这些插件编译成动态链接库(Windows 上是 .dll 文件,其他平台上通常是 .so 或 .node 文件),最后在 Node.js 中通过 require 函数加载这些插件。

windows-build-tools

windows-build-tools是一个Node模块,它旨在简化在windows操作系统上设置Node.js开发环境的过程。它主要关注于安装编译Node.js本级模块所需的构建工具。

以下是window-build-tools的主要功能:

  1. 安装Python 2.7:许多Node.js模块依赖于Python进行编译。windows-build-tools会自动安装Python 2.7,确保这些模块能够正常编译。

  2. 安装Vistual C++ Build Tools:它会安装Microsoft Visual C++ Build Tools,这是编译C++模块所必须的。

  3. 自动化安装过程,通过npm install --global -- production windows-build-tools命令,用户可以一次性安装所有必需的构建工具,避免了手动下载和安装的繁琐过程。

node-sass可以使用Dart Sass代替

node-sass安装也许会很慢,如果是内网,在线下载node-v16.17.1-headers.tar.gz会失败,可以使用Dart Sass替换。scss-loader官方也是推荐使用Dart Sass。而且在安装node-sass时,也有提示“Node Sass is no longer supported. Please use sassor sass-embedded

参考: juejin.cn/post/736793…