KuangPF/vue-cli-analysis

想问下作者关于vue serve/build和npm run serve/build(vue-cli-service serve/build)的区别

Closed this issue · 9 comments

我目前使用的也是vue-cli3版本,但是有些疑惑vue xxx和npm run xxx(也就是vue-cli-service xxx),这两套命令有什么区别吗,如果执行效果一样的话为什么还会同时存在呢~

这两个命令没啥区别,vue serve 本质调用的是 vue-cli-service 内置 serve 插件。因为vue-cli3.x是一个插件的机制。你说的是项目中同时存在两个命令么?

是的,我在build一个基于vue-cli3的vue2项目的时候,觉得同时有vue build和npm run build这两个命令很奇怪,也不太清楚有什么区别,看了您写的源码分析,也看到了这两个命令同样是创建了Service示例并执行了run方法,但是不太清楚他们是配置有什么不同吗,如果配置也是一样的话vue-cli3给了两个效果一样的构建命令就感觉很奇怪......

能将 package.json scripts 字段截个图不,我看下具体的脚本命令。

不好意思我可能没有表达清楚,我项目里面package.json scripts build都是用的vue-cli-service build构建的,就像图中那样,
image
但是我想到了脚手架还提供了vue build命令,看了源码还是没搞清楚,这两个build命令到底有什么区别,是配置的不同还是有什么其他的不一样的地方,就很疑惑如果两个命令效果是相同的话为什么官方会提供vue build和vue-cli-service build这两个功能一样的命令

你纠结的点算是明白了,可以这样理解,vue 可以认为是一个脚手架的命令,比如:

  • vue create:创建模板
  • vue add: 安装插件
  • vue inspect: 审查一个 Vue CLI 项目的 webpack config
  • 等等

而 vue-cli-service 从字面意思也比较好理解,脚手架服务,这个命令可以启动开发环境或者构建打包环境等,只是 vue 命令可以理解为是维护了从开发到构建整个过程全套的命令,比如,create,dev以及build等(前面也有提到 dev 以及serve是 vue-cli-service 内置插件服务)。

如果你还是纠结这两个命令,你也可以换这种思路:vue 命令包含了 vue-cli-service 所有命令,你总不能用 vue-cli-service create 去创建模板吧,你也不能基于 vue.js 去开发 vue-cli-service 插件吧。所以这两者虽然 vue 命令行功能包含了 vue-cli-service,但两者也是相辅相成。vue create,add 等命令是脚手架自身实现,而 dev,build 是基于 vue-cli-service 实现。

如果还有疑惑可以再次深入探讨。

感谢作者的耐心回复,不知道我理解的对不对,除了vue独有的命令如create、add等等以外,其他的如vue serve、vue build命令和vue-cli-service serve、vue-cli-service build的执行效果是一模一样的,原因就是vue serve/build命令完全是基于vue-cli-service的,是这样吗?

补充一下,我又查看了项目以前的package.json文件:
image
发现之前的构建都是使用的vue build,而现在都使用的是vue-cli-sevice build,如果两个命令效果是一样的话这种替换有什么必要吗?

感谢作者的耐心回复,不知道我理解的对不对,除了vue独有的命令如create、add等等以外,其他的如vue serve、vue build命令和vue-cli-service serve、vue-cli-service build的执行效果是一模一样的,原因就是vue serve/build命令完全是基于vue-cli-service的,是这样吗?

vue3 执行的效果的确是这样,至于你们为什么要将 vue 命令换成 vue-cli-serve,要看下之前 vue命令的版本,比如升级到了 vue-cli3,就统一成了 vue-cli-serve 命令

明白了,太谢谢您啦~
希望您工作顺利,天天开心^-^