0。原因今天赶紧用vue-cli默认的模板初始化了一个项目,然后github拉了一段vue的代码,准备研究一下,没想到编译的时候遇到这个错误1.盲目尝试,因为报错报告是缺少node-sass模块。好像之前已经安装了这个模块。一般问题是权限不够安装,所以安装sudonpminstall--unsafe-permnode-sass。但是还是报Error:Cannotfindmodule'node-sass'。在这个报错期间,我尝试过node-sass降级处理,还是失败了。SearchingError:Cannotfindmodule'node-sass'onGoogle基本上教你如何安装它。本质就是解决权限问题2.安装了苏光安装,但是好像找不到这个包。这时候仔细阅读报错信息,不要只看关键字,我们顺路看报错信息1.编译到transition.scss时,报错2.在/user/node_modules/sass-loader/dist/cjs.jsModulebuildfailed3.失败原因是找不到'node-sass'包4.依赖栈.../dist/getDefaultSassImplementation.js.../dist/getSassImplementation.js.../dist/index.js/user/node_modules/sass-loader/dist/cjs.js然后全局找到这个错误文件,发现我导入的.vue文件有引用这个错误文件//importTooltipfrom'elementinthe.vuefile-ui/lib/tooltip.js'import'element-ui/lib/theme-chalk/tooltip.css';导入“element-ui/packages/theme-chalk/src/common/transition.scss”;注释掉这个样式文件就不会报错了。所以好像解析这个sass文件有问题,找不到node-sass。3.研究我的项目安装了node-sass,node_module里面有这个文件夹,为什么找不到?看了报错信息结合信息2和4,再看4中的各种文件(注意这里的路径都是全局globle,不是项目中的)。cjs.js中有./index.js的引用,index.js中有./getSassImplementation.js的引用getSassImplementation.js有getDefaultSassImplementation.js中写的./getDefaultSassImplementation.js的引用“usestrict”;Object.defineProperty(exports,"__esModule",{value:true});exports.default=void0;functiongetDefaultSassImplementation(){letsassImplPkg='node-sass';//标记1try{require.resolve('node-sass');}catch(error){try{require.resolve('sass');sassImplPkg='sass';}catch(ignoreError){sassImplPkg='node-sass';}}//eslint-disable-next-lineimport/no-dynamic-require,global-requirereturnrequire(sassImplPkg);//标记2}var_default=getDefaultSassImplementation;exports.default=_default;看mark1和mark2,其实就是require('node-sass'),这里require是用不到的,所以就有了错误来源4。经过周折,好研究。我在全球安装了一个node-sass。只要能在/user/node_modules/找到node-sass包就可以了。好像是这样安装的。再次编译,为什么还是报错???为什么??为什么?冷静点,程序说包还是没找到,我们先去/user/node_modules/下找node-sass,搞什么鬼,我的包在哪?看了安装信息,原来这个node-sass属于这里安装的node模块/Users/fengyangyang/.nvm/versions/node/v12.4.0/lib/node_modules/node-sass5。解决这个问题,我猜是手动改这个理论上,地址引用应该可以解决这个问题,但是我没有这么做。我注意到错误消息2的另一个问题。为什么要使用全局sass-loader?我不是在本地安装的吗?卧槽,我真的没有在本地安装。npmisass-loader后,这个问题就解决了,因为本地sass-loader可以在本地node_module中找到node-sass6。综上所述,处理这个问题是曲折的,这让我在了解了错误信息之后,真的不得不通读一遍。总结一下,这个问题是因为本地没有安装sass-loader,所以引用了全局sass-loader,但是全局sass-loader在node_module中找不到node-sass。因为全局的node-sass安装在.nvm目录下(这不一定是因为我用的是nvm管理的node包),所以这也是sass-loader的一个小bug
