• vue项目在构建过程中报错 Error: ENOENT: no such file or directory, scandir '***/node_modules/nodesass/vendor'


    项目在远程构建时 执行npm installl && npm run build过程中显示如下错误:

    是因为使用node-sass依赖导致的;在安装node-sass的过程中会出现安装失败的情况(未找到根本原因)

    node-sass在官方文档上面实际已经是不推荐了的,可以在git库中看到不建议使用node-sass;

           

    具体解决方案:

    1 可以使用sass 替换node-sass 将原有的node-sass卸载 重新安装sass

    npm uninstall --save node-sass
    npm install sass -D (-D 是 --save-dev的简写)

    但是注意需要将deep 更新为>>> ,语法上有些许的不同;

    2 仍然想使用node-sass可以尝试用rebuild 重新构建包(这种方案不一定能彻底解决问题)

    npm rebuild node-sass
    

      可以在package.json里面build报错之前进行预编译

         

    可以理解为一个钩子 ,prebuild 会在build之前自动执行;

    3 服务器更新node版本

    注意:在迁移到sass过程时,可能部分包会依赖sass,比如webpack3版本

    使用的 webpack 版本不低于4的项目,可以直接迁移过去 dart-sass, 项目是 webpack 3, 如果要支持 dart sass 就需要最低 webpack 4 + sass-loader v9 以上的版本,可以通过升级webpack版本来彻底解决问题,但是需要注意对 webpack 进行升级会牵涉很多打包部件的修改;

    备注:

    npm 脚本有prepost两个钩子。举例来说,build脚本命令的钩子就是prebuildpostbuild

    "prebuild": "echo I run before the build script",
    "build": "cross-env NODE_ENV=production webpack",
    "postbuild": "echo I run after the build script"
    

      用户执行npm run build的时候,会自动按照下面的顺序执行。

    npm run prebuild && npm run build && npm run postbuild
    

      因此,可以在这两个钩子里面,完成一些准备工作和清理工作。下面是一个例子。

    "clean": "rimraf ./dist && mkdir dist",
    "prebuild": "npm run clean",
    "build": "cross-env NODE_ENV=production webpack"
    

      npm 还有很多其他的钩子,关于package.json相关的内容可以参考阮大佬的一篇文章:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html

  • 相关阅读:
    【POJ】3243 Clever Y
    【BZOJ】3916: [Baltic2014]friends
    【URAL】1960. Palindromes and Super Abilities
    【BZOJ】3621: 我想那还真是令人高兴啊
    【BZOJ】2286: [Sdoi2011消耗战
    【POJ】2891 Strange Way to Express Integers
    鬼畜的多项式
    【CF】438E. The Child and Binary Tree
    【BZOJ】3456: 城市规划
    【POJ】1811 Prime Test
  • 原文地址:https://www.cnblogs.com/xhliang/p/16048614.html
Copyright © 2020-2023  润新知