chenxiaochun / blog

🖋️ChenXiaoChun's blog
181 stars 15 forks source link

不用重新安装,解决 node-sass 平台兼容问题 #65

Open chenxiaochun opened 5 years ago

chenxiaochun commented 5 years ago

npm-error-e1505468247827

问题现象

如果你的项目依赖了 node-sass,有时在运行时,可能会抛出以下异常:

./node_modules/node-sass/lib/binding.js:13
      throw new Error(errors.unsupportedEnvironment());
      ^

Error: Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (64)

问题原因

这是因为 node-sass 每次安装时会根据当前操作系统、nodejs 版本(只需要关心主版本号)、当前 node-sass 版本进行编译,生成一个.node结尾的二进制文件,它的位置在当前项目的node_modules/node-sass/vendor/下。

例如,在我的电脑中一个比较老的项目,当时安装 node-sass 时,它就生成了以下.node文件:

vendor
├── darwin-x64-57
│   └── binding.node

可是,当你本地的 nodejs 升级之后,之前 node-sass 中编译生成的.node文件已经无法兼容当前的系统环境和 nodejs 环境了。所以,才要求你重新安装 node-sass,以让它能够根据当前环境编译生成新的.node文件。

但是,node-sass 的安装编译过程特别漫长,而且在 windows 上还极其容易安装失败。

解决办法

node-sass 官方就针对上面提到的执行环境,分别对每一个 node-sass 版本进行了编译,生成对应的.node文件。这些文件放在了 node-sass 的 github releases 里。

因此,我们只要根据自己的环境去找到对应的二进制文件,将其下载下来,放在自己的项目的 node-sass 的 vendor 文件夹下即可。这样就完全避免了 node-sass 的重新安装。

编译完成的.node文件根据操作系统的类型分为以下几种:

文件名后面的数字越大,表示支持的 nodejs 版本也越高,具体应该选择哪个版本,就需要自己稍微尝试一下了。