yuanjin
yuanjin
  • 发布:2020-03-17 18:41
  • 更新:2020-03-17 22:23
  • 阅读:913

【BUG】MacOS+HBuilderX 2.6.5 试图编译 node_modules 里一切文件,当存在动态require时

分类:HBuilderX

环境:
MacOS 10.15 Catalina
HBuilder X 2.6.5 20200314
uniapp

参见附件的demo工程,当代码中存在动态require时:

  return require('./'+type)

此时,运行到内置浏览器(或任何其他编译行为)时,试图编译 node_modules 下一切文件。如图,它尝试编译 *.md, makefile, 等等一切文件,即使并没有使用的包里的文件(例如我随便引入了两个包 compression和ws,但并没有使用)

在 Windows版 HBuilder X 2.6.5 上没有出现这个错误。

2020-03-17 18:41 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

期望是什么?如果不需要,那就不应该引入,引入了,那肯定要解析,编译里边的代码,不然你那些require的东西,也运行不起来的。能做的优化,就是,没有真正使用的话,就摇树移除。

  • yuanjin (作者)

    进一步发现,不需要循环引用。只要是动态引用,就会出错。例如,只要代码里出现有


    module.exports = function Fish (type) {  
    return require('./'+type)
    }

    就会有上述问题,会把 node_modules里一切文件都扫描编译。动态引用,有时还是有用的吧?比如编译时不确定到底需要引用哪个类,运行时由用户指定才明确。这在 nodejs里,在windows版的HBuilderX都可以用的,其实在Mac版里也可以,虽然尝试扫描一切文件,但最后还是编译通过,可以使用的。只是编译整个node_modules太耗时了。


    不过确实,这用其他方法可以绕过的,不是必须的。

    2020-03-17 21:57

  • DCloud_UNI_FXY

    回复 yuanjin: uni-app不支持动态require

    2020-03-18 11:11

yuanjin

yuanjin (作者)

更简单的demo,只要出现动态引用的语句就有上述问题。不是必须功能,仅供参考。

哦 发现windows版和mac版上都有这个现象。估计是打包工具如 webpack 的问题,不是HBuilder的问题了

该问题目前已经被锁定, 无法添加新回复