今天之前上线的小程序中的一个组件突然所有的样式内容都空了,让我很诧异,线上的版本赶紧通过微信公众平台恢复成历史版本,然后自己这边好好排查一下问题的原因。
通过小程序开发工具,发现组件中的xxx.js文件竟然为空,怪不得组件异常了
经过一段时间的排查,终于搞清楚了这个逻辑,特地分享一下:
- 查阅官方文档,
HBuilderX 2.5.5起支持easycom组件模式
这个easycom模式简单来说,就是你按照uni-app开发者规定好的文档目录结构开发组件,那么uni-app编译的时候就会自动帮你按需引入组件,我们开发者就不需要在vue中再写,import,components 这些符号了。
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。
easycom将其精简为一步。 只要组件安装在项目根目录或uni_modules的components目录下,并符合components/组件名称/组件名称.vue或uni_modules/插件ID/components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。
而这个easycom在uni-app中是默认开启的,如果要关闭的话,在page.json中添加如下配置:
"easycom": {
"autoscan": false
},
而我这次的组件编译js内容为空的问题,就是这个easycom导致的
因为在开发的时候,我的组件是按照easycom的命名规范和目录结构开发的,但是在使用的时候,使用了import语法,但是却漏写了components ,其实这里应当是会报错的,但是由于easycom支持了,所以在H5端调试的时候是没有问题的。但是这样的写法放到小程序里就出错了,直接导致了js内容为空。
因此,有两种方法解决这个问题:
- 去掉
importcomponents直接使用组件 - 不使用easycom功能,在引入的组件中按照vue规范写入
importcomponents