vue-cli-service在打包webpack项目时,由于vue router导入视图文件的写法不同,打包的参数npm run build:dev | npm run build:prod引起的页面展示差异,例如静态导入,异步导入等,下面来介绍一下这几种差异。
[Vue Router warn]: Component "default" in record with path "/router" is a Promise instead of a function that returns a Promise. Did you write "import('./**.vue')" instead of "() => import('./**.vue')" ? This will break in production if not fixed. 所以得出一个结论:路由视图文件的导入必须采用异步函数或者在文件头处导入
在各种查询中叶没有得到具体的原因,但是翻开vue-cli的文档时,有惊喜的发现,其实这样是由原因的:模式和环境变量 | Vue CLI,以下是引用原文:
模式是 Vue CLI 项目中一个重要的概念。默认情况下,一个 Vue CLI 项目有三个模式:
development模式用于vue-cli-service servetest模式用于vue-cli-service test:unitproduction模式用于vue-cli-service build和vue-cli-service test:e2e你可以通过传递
--mode选项参数为命令行覆写默认的模式。例如,如果你想要在构建命令中使用开发环境变量:vue-cli-service build --mode development当运行
vue-cli-service命令时,所有的环境变量都从对应的环境文件中载入。如果文件内部不包含NODE_ENV变量,它的值将取决于模式,例如,在production模式下被设置为"production",在test模式下被设置为"test",默认则是"development"。
NODE_ENV将决定您的应用运行的模式,是开发,生产还是测试,因此也决定了创建哪种 webpack 配置。例如通过将
NODE_ENV设置为"test",Vue CLI 会创建一个优化过后的,并且旨在用于单元测试的 webpack 配置,它并不会处理图片以及一些对单元测试非必需的其他资源。同理,
NODE_ENV=development创建一个 webpack 配置,该配置启用热更新,不会对资源进行 hash 也不会打出 vendor bundles,目的是为了在开发的时候能够快速重新构建。当你运行
vue-cli-service build命令时,无论你要部署到哪个环境,应该始终把NODE_ENV设置为"production"来获取可用于部署的应用程序。
所以原因就很清楚了。