uni-app安装scss/sass后报错:node-sass\4.12.0\win32-x64-64_binding.node is not a valid Win32 application.

Deadly 提交于 2019-12-05 13:02:06

场景描述

最近在使用uni-app开发小程序时,因为引入了第三方组件使用了sass,HBuilder默认没有安装‘scss/sass’插件,导致编译报错,于是用IDE安装了一下,但是接着运行小程序又出现了如下错误:

17:27:14.564 Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
17:27:14.565 ModuleBuildError: Module build failed (from ./node_modules/sass-loader/lib/loader.js):
17:27:14.575 Error: \\?\C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0\win32-x64-64_binding.node is not a valid Win32 application.
17:27:14.587 \\?\C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0\win32-x64-64_binding.node
17:27:14.595     at Object.Module._extensions..node (module.js:681:18)
17:27:14.595     at Module.load (module.js:565:32)
17:27:14.602     at tryModuleLoad (module.js:505:12)
17:27:14.603     at Function.Module._load (module.js:497:3)
17:27:14.611     at Module.require (module.js:596:17)
17:27:14.612     at require (internal/module.js:11:18)
17:27:14.620     at module.exports (D:\Program Files\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\lib\binding.js:19:10)
17:27:14.620     at Object.<anonymous> (D:\Program Files\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\lib\index.js:14:35)
17:27:14.630     at Module._compile (module.js:652:30)
17:27:14.631     at Object.Module._extensions..js (module.js:663:10)
17:27:14.640     at Module.load (module.js:565:32)
17:27:14.640     at tryModuleLoad (module.js:505:12)
17:27:14.649     at Function.Module._load (module.js:497:3)
17:27:14.650     at Module.require (module.js:596:17)
17:27:14.658     at require (internal/module.js:11:18)
17:27:14.661     at Object.<anonymous> (D:\Program Files\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\index.js:8:22)
17:27:14.670     at runLoaders (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\webpack\lib\NormalModule.js:301:20)
17:27:14.671     at D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:367:11
17:27:14.680     at D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:233:18
17:27:14.680     at runSyncOrAsync (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:143:3)
17:27:14.692     at iterateNormalLoaders (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:232:2)
17:27:14.692     at iterateNormalLoaders (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
17:27:14.702     at D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:236:3
17:27:14.703     at Object.context.callback (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
17:27:14.713     at Object.module.exports (D:\Program Files\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\webpack-preprocess-loader\index.js:60:10)
17:27:14.714  ERROR  Build failed with errors.

分析

首先我们需要从一大堆错误信息中分析提取有用的信息:C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0\win32-x64-64_binding.node is not a valid Win32 application这段信息告诉我们,我当时开发环境安装的node-sass@4.12.0win32-x64-64_binding.node这个二进制可执行文件是无效的(该文件肯定是存在的,不然会报其他错误)。
初步排查,担心是自己安装的这个版本有问题,便卸载了重新安装(node-sass@4.13.0):

npm rm node-sass 
npm install node-sass

然后重新运行小程序还是报同样的错误,说明这个文件还是无效。于是看了一下网上说可以下载GitHub上对应版本的文件(地址:https://github.com/sass/node-sass/releases)来替换,以验证文件是否损坏,试了一下还是不行。

解决办法

鉴于以上测试,可以确定这两个版本的文件都没有问题,那问题很可能出在全局安装的sass版本与uni-app编译需要的版本不一致导致的。
于是继续测试,将\npm-cache\node-sass\4.12.0\win32-x64-64_binding.node文件重命名,可以肯定,编译会报不存在sass的错误,那就可能会给出真正需要的版本号,再次运行编译,果然出现了如下错误:

17:57:25.735 [0;31m--> LibSass 的二进制文件(C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0\win32-x64-64_binding.node)缺失,请执行下面3条命令下载对应版本的二进制文件:(有可能引发此错误的原因是 Node 版本变更)[0m 
17:57:25.751   mkdir -p C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0
17:57:25.757   cd C:\Users\Administrator\AppData\Roaming\npm-cache\node-sass\4.12.0
17:57:25.763   curl -o win32-x64-64_binding.node http://cdn.npm.taobao.org/dist/node-sass/v4.7.2/win32-ia32-57_binding.node
17:57:25.771 [0;31m--> MacOS 、Unix/Linux 请根据权限使用 sudo [0m 

这个提示信息中的关键其实是倒数第二段中的node-sass/v4.7.2/win32-ia32-57_binding.node,这是需要下载的文件,版本号是v4.7.2,到此终于明白了其实是原因是我们使用的二进制文件的版本不对,只需要用下载(命令行或者浏览器下载均可)后重命名覆盖之前的win32-x64-64_binding.node文件即可。

18:03:57.867  DONE  Build complete. Watching for changes...
18:03:57.867 项目 'Colorui-UniApp' 编译成功.
18:03:57.892 正在启动微信开发者工具...
18:03:58.585 [微信小程序开发者工具] Initializing...
18:03:58.585 [微信小程序开发者工具] idePortFile: C:\Users\Administrator\AppData\Local\微信开发者工具\User Data\Default\.ide
18:03:58.599 [微信小程序开发者工具] IDE server has started, listening on http://127.0.0.1:39346
18:03:58.600 [微信小程序开发者工具] initialization finished
18:03:58.619 [微信小程序开发者工具]
18:04:00.535 [微信小程序开发者工具] open IDE success
18:04:00.536 [微信小程序开发者工具]
18:04:00.543 微信开发者工具已启动,在HBuilderX中修改文件并保存,会自动刷新微信模拟器

特此记录,希望能对碰到同样问题的朋友有所帮助。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!