小程序腾讯云环境安装依赖错误

背景

开发工具:微信开发者工具

操作系统:Mac

腾讯云环境:Node

问题

最近使用node-sechedule开发了一个后台定时任务,这个是新增的node模块,所以需要安装依赖,即在package.json中增加对应的依赖:

1
2
3
4
"dependencies": {
...
"node-schedule": "^1.3.1"
},

在本地测试通过之后,点击开发工具上面的“腾讯云”-“上传测试代码” 并勾选安装依赖。问题就出现了!!!

install_error

排查及原因

  • 感觉这是权限问题啊,于是切换了小程序的管理员用户,点击上传,情况一样。

  • 无奈只能先恢复开发环境了,然后再次上传。根据文档推荐,首次上传最好使用模块上传,全部勾选,结果情况还是一样。

    instal_upload

    看了node_modules文件夹中,的确有node-schedule文件夹啊,不过有一点奇怪的是,安装每个安装的npm包都有一个_开头的文件夹:

    npm_package

  • 看来得找专家了,于是在腾讯云控制台上提交了一个工单,过了半个小时的样子就有工程师电话来了。他首先在自己的环境里试了一下我的package.json包,竟然没有问题。。。

    工程师登录我的后台服务器看了下:

    install_error_server

    感觉可能是因为上面这种奇怪的包文件夹造成的。于是乎,再恢复一次环境,然后我再次上传,这次不再勾选“上传node_modules代码”。

    install_upload

    这样也即是让后台服务器自动安装所有的依赖。最后,成功了!

    install_success

    这时候再看一下后台服务器上目录:

    install_success_server

    没有了那种_开头的目录,就成功了。

插曲

有了上面的经验,本以为上传到生产环境就妥妥的了。结果点击“上传正式代码”之后,坑爹了。

正式代码上传是没有上面的这种选项的,本机上的那些_开头的node_modules文件也上传了,再一次入坑。

于是乎,只能再次联系腾讯云的工程师,删除了我工程的node_modules文件夹,然后点击控制台上的安装依赖。待依赖安装完成后,再次部署代码。

这时候后端启动已经没有问题,但是小程序竟然无法直接访问,最后发现是由于小程序解决方案里本来是自带ssl证书的,这个证书最近到期了,需要自己购买新的证书(选免费的)联系后台更新。

至此问题彻底解决。

结论

可以看出,主要问题还是在于node_modules里文件的问题。而这个的罪魁祸首是——cnpm

可以参考如下的issue,cnpm安装包时采用link的方式,与npm不一样。

https://github.com/cnpm/cnpmjs.org/issues/1000

在小程序上传之后自动安装包,则用的是npm安装,从而导致问题出现。以后在没弄明白之前还是先用原生的吧,在别人给你便利的时候,也要明白其中有什么道理。

另外,建议自己在本地开发的时候,server目录下还是把node_modules给删除了,以免后续一不小心又上传了什么问题文件。