首页 > 其他分享 >vue项目中npm run dev和npm run serve的区别分析

vue项目中npm run dev和npm run serve的区别分析

时间:2022-09-04 12:26:00浏览次数:91  
标签:npm vue run cli serve dev

在前端项目开发过程中,我们经常会遇到需要使用 npm run dev 或者 npm run serve 命令来启动项目,这也是启动项目的命令,但是有时候运行 npm run serve 会报错, 运行 npm run dev 时会报错。正常运行,那么两者有什么区别呢?

什么是 npm

要了解两者的区别,首先要了解这两个命令的含义,即两个命令运行时会发生什么。

首先让我们看看 npm

npm其实是nodejs官方提供的包管理平台,npm提供了一个命令行工具npm-cli,我们在使用npm命令的时候,其实是通过node运行了一个名为npm-cli.js的脚本

npm 安装命令

构建项目时,通过 npm install 命令,会在项目目录下生成一个名为 node_modules 的文件夹

image.png

主要用来存放包管理工具下载安装的包的文件夹,可以理解为项目所依赖的外部模块的缓存。比如elementui、echarts等一些组件库,通过npm i安装后会被下载复制到node_modules文件夹中。

我们在 npm 中也涉及到很多命令。接下来,我们来解释一下 npm run 命令。

npm run ×××命令的运行原理

我们知道我们可以使用 npm run serve 和 npm run dev 启动项目,并且可以使用 npm run build 命令打包项目,那么运行 npm run 会发生什么?

在项目目录下,我们可以看到一个名为 package.json 的文件,它是对项目和模块包的描述。在 package.json 文件中,有一个脚本字段

 // 运行 npm run serve 的 scripts 字段  
 “脚本”:{  
 “服务”:“vue-cli-服务服务”,  
 "build" : "vue-cli-service build" ,  
 “lint”:“vue-cli-service lint”  
 } ,  
 复制代码 //运行npm run dev的scripts字段  
 “脚本”:{  
 "dev" : "vue-cli-service 服务" ,  
 "build" : "vue-cli-service build" ,  
 "lint" : "vue-cli-service lint" ,  
 "webpack" : "webpack --version"  
 } ,  
 复制代码

我们可以看到在运行npm run serve命令启动项目的项目中,scripts中有一个serve字段,npm run dev命令中有一个dev字段。这时候我们就可以大致理解了,运行npm run命令的时候,其实就是去package.json文件中的scripts里面找到对应的×××,然后执行对应的命令。如果我们想运行 npm run dev 命令,我们只需要将脚本中的 serve 改为 dev 即可。可以通过 npm run dev 启动项目吗?

image.png

image.png

我们可以看到将serve改为dev后,可以运行npm run dev命令启动项目

但是问题来了,如果我们只有一个字段名的区别,为什么一个启动项目的命令要有serve和dev两种模式呢?

从上面我们可以知道,在运行 npm run serve 的时候,其实是在运行命令 vue-cli-service serve 。在上面我们引用的例子中,我们可以看到,在脚本中,无论是serve还是dev对应的命令都是vue-cli-service serve,那么dev和serve有什么区别呢?

通过我的Simple百度我苦苦搜索,发现在vue-cli2.0中,dev字段的命令是

 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",  
 复制代码

 "serve": "vue-cli-service serve",  
 复制代码

只在vue-cli3.0中使用过,所以虽然我们可以通过改变serve的字段名来改变npm run命令,但是在使用的时候,npm run dev和npm run serve本质上是运行不同版本的vue-cli脚本启动下的项目。

补充

从上面我们可以知道,当 npm run serve 是运行命令 vue-cli-service serve 时,为什么不运行命令 vue-cli-service serve 而不是运行 npm run serve 呢?

所以我大胆秉承科学真理的精神,运行命令 vue-cli-service serve

image.png

然后我们可以发现控制台报错,无法识别vue-cli-service。那么,这个命令是如何工作的呢?这时候我们可以看到命令 webpack-dev-server --inline --run by npm run dev -progress --config build/webpack.dev.conf.js,一个js文件,会npm run serve也运行一个脚本,所以我在项目中全局搜索vue-cli-service,发现在node_modules文件文件夹的.bin文件下找到了一个名为vue-cli-service的文件

 #!/bin/sh  
 basedir=$( 目录名 " $(echo " $0 " | sed -e 's,\\,/,g') ")  
  
 案例`uname`在  
 *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;  
 经社理事会  
  
 if [ -x " $basedir /node" ];然后  
 "$basedir /node" "$basedir /../@vue/cli-service/bin/vue-cli-service.js" "[ [电子邮件保护]](/cdn-cgi/l/email-protection) "  
 转=$?  
 别的  
 节点 "$basedir /../@vue/cli-service/bin/vue-cli-service.js" "[ [电子邮件保护]](/cdn-cgi/l/email-protection) "  
 转=$?  
 菲  
 退出 $ret  
  
 复制代码

在这个脚本下,我们可以找到一个命令节点“$basedir/../@vue/cli-service/bin/vue-cli-service.js”,那么到这里,基本可以确认了,虽然不能运行vue直接-cli-service,但是我们运行npm的时候会去node_modules/.bin找到vue-cli-service文件,然后把文件作为脚本运行。

参考文章

“node_modules”文件夹的用途是什么?

npm命令详解——掘金(juejin.cn)

Vue 让你了解 npm run dev 和 npm run serve 的区别——掘金(juejin.cn)

面试官:运行 npm run xxx 会发生什么? ——掘金(绝进.cn)

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议。转载请附上原文出处链接和本声明。

这篇文章的链接: https://homecpp.art/1204/6411/0928

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/12310/08290412

标签:npm,vue,run,cli,serve,dev
From: https://www.cnblogs.com/amboke/p/16654813.html

相关文章

  • vue3——计算属性与监视
    一.computed函数与Vue2.x中computed配置功能一致写法: 以上是两种写法:第一种简写形式:如果在显示界面更改了fullname,会有警告:计算属性不能更改,因为简写的形式是只读的......
  • vue3 基础-组件间传值及校验
    本篇讲基于对页面组件化拆分后,组件之间如何进行数据传递,通常是父组件如何给子组件进行传值,子组件接收并进行数据校验后再使用.父子组件传值<!DOCTYPEhtml><html......
  • Django 与 Vue 语法冲突问题完美解决方法
    Django与Vue语法冲突问题完美解决方法当我们在djangoweb框架中,使用vue的时候,会遇到语法冲突.因为vue使用{{}},而django也使用{{}},因此会冲突.......
  • 使用 Django 集成 vue 到一个服务器上,还是 Django 和 vue 分开部署
    Django+Vue的项目,实际部署的时候,使用Django集成vue到一个服务器上,还是Django和vue分开部署?目前在架构选择,基本上定了Django+Vue但是实际部署的时候,就有两种......
  • Element Plus 在 vue3 中使用
    特殊情况下,解决方案:1、el-tree实现收缩的关键字:expanded【组件内部处理的树形数据格式中的关键字】定义树形组件:<el-treeref="treeRef">...</el-tree>获取组件......
  • Vuex是什么,每个属性是干嘛的,如何使用 ?
    Vuex是集中管理项目公共数据的仓库。Vuex大幅减少了组件通信的繁杂度,拥有state数据存储,mutations处理同步事件,modules模块的注册,actions处理异步事件,getters过滤数......
  • vue项目结构学习
      {path:'/core/integral-grade',component:Layout,/**父级路由组件*/redirect:"/core/intergral-grade/list",//默认跳转的路径name:"cor......
  • VUE(试水篇)
    Prerequisite简单学习下Vue3emmReferenceVue3官方文档Vue3官方教程Vue3+TypeScriptVue3B站教程......
  • Vue错误
    【Vue】组件命名报错“Componentname“XXX“shouldalwaysbemulti-word”的解决方法在配置完ESlint后,要求代码格式规范的同时,也规定了组件的名称格式,要写成“XXX......
  • vue管理后台启动时core.js报错
    vue管理后台启动时报错Thisdependencywasnotfound:*core-js/modules/es.error.cause.jsin./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js,......