场景描述
最近在使用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.0
中win32-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中修改文件并保存,会自动刷新微信模拟器
特此记录,希望能对碰到同样问题的朋友有所帮助。
来源:CSDN
作者:深海红星
链接:https://blog.csdn.net/gaoshanliushui131/article/details/103034550