背景
开发工具:微信开发者工具
操作系统:Mac
腾讯云环境:Node
问题
最近使用node-sechedule
开发了一个后台定时任务,这个是新增的node模块,所以需要安装依赖,即在package.json
中增加对应的依赖:
1 | "dependencies": { |
在本地测试通过之后,点击开发工具上面的“腾讯云”-“上传测试代码” 并勾选安装依赖。问题就出现了!!!
排查及原因
感觉这是权限问题啊,于是切换了小程序的管理员用户,点击上传,情况一样。
无奈只能先恢复开发环境了,然后再次上传。根据文档推荐,首次上传最好使用模块上传,全部勾选,结果情况还是一样。
看了
node_modules
文件夹中,的确有node-schedule
文件夹啊,不过有一点奇怪的是,安装每个安装的npm包都有一个_
开头的文件夹:看来得找专家了,于是在腾讯云控制台上提交了一个工单,过了半个小时的样子就有工程师电话来了。他首先在自己的环境里试了一下我的
package.json
包,竟然没有问题。。。工程师登录我的后台服务器看了下:
感觉可能是因为上面这种奇怪的包文件夹造成的。于是乎,再恢复一次环境,然后我再次上传,这次不再勾选“上传node_modules代码”。
这样也即是让后台服务器自动安装所有的依赖。最后,成功了!
这时候再看一下后台服务器上目录:
没有了那种
_
开头的目录,就成功了。
插曲
有了上面的经验,本以为上传到生产环境就妥妥的了。结果点击“上传正式代码”之后,坑爹了。
正式代码上传是没有上面的这种选项的,本机上的那些_
开头的node_modules
文件也上传了,再一次入坑。
于是乎,只能再次联系腾讯云的工程师,删除了我工程的node_modules
文件夹,然后点击控制台上的安装依赖。待依赖安装完成后,再次部署代码。
这时候后端启动已经没有问题,但是小程序竟然无法直接访问,最后发现是由于小程序解决方案里本来是自带ssl证书的,这个证书最近到期了,需要自己购买新的证书(选免费的)联系后台更新。
至此问题彻底解决。
结论
可以看出,主要问题还是在于node_modules里文件的问题。而这个的罪魁祸首是——cnpm
。
可以参考如下的issue,cnpm安装包时采用link的方式,与npm不一样。
https://github.com/cnpm/cnpmjs.org/issues/1000
在小程序上传之后自动安装包,则用的是npm安装,从而导致问题出现。以后在没弄明白之前还是先用原生的吧,在别人给你便利的时候,也要明白其中有什么道理。
另外,建议自己在本地开发的时候,server
目录下还是把node_modules
给删除了,以免后续一不小心又上传了什么问题文件。