记uni-app 编译微信小程序时部分组件的js内容为空

455 阅读2分钟

今天之前上线的小程序中的一个组件突然所有的样式内容都空了,让我很诧异,线上的版本赶紧通过微信公众平台恢复成历史版本,然后自己这边好好排查一下问题的原因。

通过小程序开发工具,发现组件中的xxx.js文件竟然为空,怪不得组件异常了

image.png

经过一段时间的排查,终于搞清楚了这个逻辑,特地分享一下:

  • 查阅官方文档, HBuilderX 2.5.5起支持easycom组件模式

这个easycom模式简单来说,就是你按照uni-app开发者规定好的文档目录结构开发组件,那么uni-app编译的时候就会自动帮你按需引入组件,我们开发者就不需要在vue中再写,import,components 这些符号了。

传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。 只要组件安装在项目根目录或uni_modules的components目录下,并符合components/组件名称/组件名称.vueuni_modules/插件ID/components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。

而这个easycom在uni-app中是默认开启的,如果要关闭的话,在page.json中添加如下配置:

"easycom": {
        "autoscan": false
},

而我这次的组件编译js内容为空的问题,就是这个easycom导致的

因为在开发的时候,我的组件是按照easycom的命名规范和目录结构开发的,但是在使用的时候,使用了import语法,但是却漏写了components ,其实这里应当是会报错的,但是由于easycom支持了,所以在H5端调试的时候是没有问题的。但是这样的写法放到小程序里就出错了,直接导致了js内容为空。

因此,有两种方法解决这个问题:

  1. 去掉import components 直接使用组件
  2. 不使用easycom功能,在引入的组件中按照vue规范写入import components