这次项目在最后的部署阶段,需要部署一个测试服务器的环境,正常的环境是开发环境和生产环境,分别是‘development’和‘production’,这次了解到除了这两种还存在有‘test’,也就是测试环境。
在package.json中的配置如下:
"scripts": {
"dev": "vue-cli-service serve",
"prod": "vue-cli-service build",
"test": "vue-cli-service build"
}
然后在服务器上进行npm run test打包之后,项目运行总是会出现Error: Cannot find module '@/views/xxx’的问题,当时在网上搜索大部分的答案说是需要把router路由模式修改成懒加载的模式,将
component: () => import ('@/views' + file)
改为
component: (resolve) => require(['@/views' + file], resolve)
但是这种方式了话,会直接影响到其他服务器的代码部署,同时因为项目的问题,会导致js代码渲染特别的慢,进入页面会有十几秒钟的空白状态,体验非常不好,所以就展开了深入研究。
通过研究之后发现,在node_modules里边webpack打包配置中,似乎对production生产环境进行了特殊的处理,而现在使用的test打包,会和production打包环境下的不一样,从而导致了一些特殊情况的发生,但是具体到底是为什么也没有了解清楚,没有看懂webpack的源码。
最终的解决方案就是让test部署模式尽量趋近于正常状态下的打包模式,于是在通过研究之后使用了mode配置,package.json修改之后的如下:
"scripts": {
"dev": "vue-cli-service serve",
"prod": "vue-cli-service build",
"test": "vue-cli-service build --mode development"
}
通过mode配置,可以让当前的打包命令按照对应的模式进行打包
项目中配置了如上的文件,那么在使用- -mode development就会使test打包命令指向.env.development文件中对应的网络地址配置,到此问题就解决了。
当然我也尝试过配置 - -mode test,但是发现通过这种方式也会导致上边出现的Error: Cannot find module '@/views/xxx’问题。