vue执行配置选项npm run serve的本质

news2024/11/19 17:34:38

vue执行配置选项npm run serve运行开发服务器的本质

目录

vue执行配置选项npm run serve运行开发服务器的本质

一、启动开发服务器、调用“工具链”、编译、并运行当前工程

二、npm run serve内部原理分析

三、vue编译运行过程

喜欢的,就收藏并点个赞,便于观看下篇文章:


一、启动开发服务器、调用“工具链”、编译、并运行当前工程

npm run serve

        该命令的配置文件在当前工程的package.json文件中,随@vue/cli脚手架驱动产生的vue的工程默认自动生成: 

 (图1)

  (图2)

二、npm run serve内部原理分析

         打开“工程”下的node包依赖路径下的“可执行脚本”目录:node_modules\bin

   (图3)

         如 图3 所示,vue-cli-service.cmd文件,即 图1 所运行的实际脚本,运行其命令行帮助:

   (图4)

         得知其需要1些选项来执行命令( 如 图4 所示):

   (图5)

        分别打开 图5 所示的两个文件,得知vue-cli-service.cmd需要带1个“选项参数”来执行内部命令( 如 图6、图7 所示):

   (图6)

   (图7)

        通过分析 vue-cli-service.js 源码:

 (图8)

         得知,“选项参数” 的别名,分别为 build、 serve 、inspect :

#!/usr/bin/env node

const { semver, error } = require('@vue/cli-shared-utils')
const requiredVersion = require('../package.json').engines.node

if (!semver.satisfies(process.version, requiredVersion, { includePrerelease: true })) {
  error(
    `You are using Node ${process.version}, but vue-cli-service ` +
    `requires Node ${requiredVersion}.\nPlease upgrade your Node version.`
  )
  process.exit(1)
}

const Service = require('../lib/Service')
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())

const rawArgv = process.argv.slice(2)
const args = require('minimist')(rawArgv, {
  boolean: [
    // build
    'modern',
    'report',
    'report-json',
    'inline-vue',
    'watch',
    // serve
    'open',
    'copy',
    'https',
    // inspect
    'verbose'
  ]
})
const command = args._[0]

service.run(command, args, rawArgv).catch(err => {
  error(err)
  process.exit(1)
})



        因而,开发环境,npm run serve 的原生CLI命令行脚本为:

node .\node_modules\@vue\cli-service\bin\vue-cli-service.js serve

         同理,生产环境,进行分发时,npm run build 的原生CLI命令行脚本为:

node .\node_modules\@vue\cli-service\bin\vue-cli-service.js build

三、vue编译运行过程

        npm run serve、npm run build等“调试运行脚本”:仅仅是Vue默认在内部做了1个“命令行”封装而已!以包配置文件(package.json)的形式与用户交互。


# 过程大致如此:
#         INFO  Starting development server... 
# node调用各个相关模块并运行:
node.exe
# vue内置webpack开始启动开发服务器webpack-dev-server :
 .\node_modules\webpack-dev-server\client\index.js?http://192.168.3.242:8081&sockPath=/sockjs-node 
 .\node_modules\webpack\hot\dev-server.js
 .\node_modules\webpack-dev-server\client\index.js?http://192.168.3.242:8081&sockPath=/
# vue内置webpack调用cache-loader和babel-loader解析代码进行语法分析、依赖分析:
 .\node_modules\cache-loader\dist\cjs.js??ref--13-0!
 .\node_modules\babel-loader\lib\index.js!
# ...........
# vue-loader加载器启动选项:
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!
# 对你的工程中的文件进行语法及依赖分析:
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=te
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\A
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avat
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\A
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avat
 .\node_modules\babel-loader\lib\index.js
 .\node_modules\cache-loader\dist\cjs.js??ref--13-0!
# ...........
# vue-loader开始调用index.js处理你的工程中的文件:
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=te
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id=
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id=
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id=
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
 .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d
# 完成“构建”并启动应用:
# 98% after emitting CopyPlugin
#  DONE  Compiled successfully in 5177ms                                                                                                                                                                                                                                                                                                   上午4:56:59
#   App running at:
#   - Local:   http://localhost:8081/
#   - Network: http://192.168.3.242:8081/
# 
#   Note that the development build is not optimized.
#   To create a production build, run npm run build.

喜欢的,就收藏并点个赞,便于观看下篇文章:

原生CLI指令构建npm run减少硬盘node_modules的开销_pulledup的博客-CSDN博客

vscode用户配置文件等的存取_pulledup的博客-CSDN博客_vscode配置文件在哪
 

关于vscode插件查询、备份与恢复_pulledup的博客-CSDN博客_vscode缓存文件内容恢复

推荐一款最流行的流程图及图表工具draw.io,老掉牙的工具已无人再用_pulledup的博客-CSDN博客_drawio 图库

http通讯及浏览器中的HTML编码、URL编码、base64编码及转义_pulledup的博客-CSDN博客

开发者实名认证的一般通行做法_pulledup的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端解决跨域问题(9个方法)

什么是跨域? 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。 这里说明一下,无法跨域是浏览器对于用户安全的考虑,如果自己写个没有同源策略的浏览器&a…

微信小程序篇_01 微信小程序与Java后端接口交互

微信小程序与Java后端接口交互准备创建后端项目创建小程序项目本文主要介绍小程序前后端数据的交互,实践演示。 准备 创建后端项目 我这里就创建一个SpringBoot项目作为演示。 在创建项目中选择Spring Initializr 要勾选SpringWeb框架,当然你也可以…

在html页面以导入的方式使用axios进行异步请求

一、下载axios GitHub地址:https://github.com/axios/axios 注:该页面下面有官方的帮助文档内容。 下载zip包到本地后解压 在axios-1.x\dist\esm下找到axios.min.js文件 这个文件就是后面需要导入的文件 二、导入文件 首先在IDEA中的webapp文件夹下…

使用 Vue3 开发了四个月,回顾 emit 的用法

前言:不知不觉已经从 React 转 Vue3 开发四个多月了,但其实自从刚接触 vue 开始,就对 emit 这个指令似懂非懂。所以在项目中其实我还是很害怕去使用这个指令的,但是在有些场景又不得不使用,就只能看着同事的代码比葫芦…

Vue的环境配置

vue环境配置安装地址:安装 — Vue.js 一、Node官网地址:下载 | Node.js 中文网 查看node版本∶打开命令工具,执行"node -v"命令查看版本号。 二、git-bash命令行工具 git-bash命令行工具官网地址:Git 查看git版本&#…

【Vue】跳转外部链接并携带参数并触发

需求: 当平台运行多个系统时("系统一","系统二" 都是不同时间段开发的) 可以从"系统一"点击按钮跳转到"系统二",并且完成 "系统二" 登录操作,直接显示&…

【小程序项目开发 --- 京东商城】 启航篇之uni-app项目搭建

🤵‍♂️ 个人主页: 计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 🌐 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推| 还没有账户的小伙伴 速速点击链接…

【VUE3】ElementUI--el-date-picker下拉控件样式修改(高亮显示设置)

ElementUI--el-date-picker下拉控件样式修改一些废话事发背景实现效果实现思路总结和完整代码参考资料一些废话 默默做前端,分享一些自己在项目需求实现中遇到的奇妙问题(主要是网上搜索不到解决办法自己解决后的总结方法和解决办法但不全面,…

关于oss使用sts 后台签发临时token前端直传大文件的错误记录

文章目录前言遇到的问题1. NoSuchBucket : The specified bucket does not exist.2. com.aliyuncs.exceptions.ClientException: InvalidParameter.RoleSessionName : The parameter RoleSessionName is wrongly formed.3. 报错:Access to XMLHttpRequest at 上传ur…

servlet交互过程图详解,servlet的常见问题,创建web项目(一)

目录 一.B/S模式和C/S模式 C/S:客户端服务器端结构模式 B/S:浏览器服务器模结构模式 B/S结构图: 二.创建web项目 三.举例说明Servlet执行流程图: 四.Servlet项目中常见的问题 一.当创建web项目时,没有勾选Java …

一篇文章吃透 CSS3 属性: transition过渡 与 transform动画

最近有人私信我 CSS 中的 transition (过渡) 和 transform (动画) 属性,这两个属性的参数确实比较复杂,它们可以做出 CSS 的一些基础动画效果,平移,旋转,倾角......等等,这些也是我早期学习 CSS 的难记易忘…

Java Web 开发详解

一、Web基础 1、Web 概述 Web 在英文中的含义是网状物、网络。在计算机领域,它通常指的是后者,即网络。 像 WWW 是由 3 个单词组成的,即World Wide Web,中文含义是万维网。 他们的出现都是为了让我们在网络的世界中获取资源&a…

JS总结——数组,对象遍历的方法

对于数组或者对象的遍历,筛选,提取等操作是前端开发中经常有的需求,不要再只会写普通的for循环了,虽然普通的for循环已经能完成一切的功能的,是一个特殊方法,但是针对各种需求,js给我们提供了许…

uniapp —— 实现左右联动商品分类页面

uniapp —— 实现左右联动商品分类页面 零、前因 我们在日常的开发种,这种页面在项目当中经常会用得到,所以本篇文章会比较注重描述其思路,顺带附上其代码,以便以后在任何代码环境下都能使用上,先介绍一下实现思路&a…

Vue 中 iconfont 使用

图标库的发展过程,iconfont图标库的重要性(项目常用) 对于前端而言,图标的发展可谓日新月异。从img标签,到雪碧图,再到字体图标,svg,甚至svg也有了类似于雪碧图的方案svg-sprite-lo…

npm run 是什么?为什么使用npm run 这一命令,就能够将 webpack 跑起来并进行下一步的操作?

npm run 实际上是衔接 node 和 webpack 的连接点。先看看终端运行的npm是什么,如下图: 图中的关键点是最后一行 C:\Users\***\AppData\Roaming\npm\node_modules\npm。从它可以推断出系统环境变量下配置的npm的路径为C:\Users\***\AppData\Roaming\npm,可以去环境变量中确认…

css实现炫酷充电动画

先绘制一个电池&#xff0c;电池头部和电池的身体 这里其实就是两个div&#xff0c;使用z-index改变层级&#xff0c;电池的身体盖住头部&#xff0c;圆角使用border-radius完成 html部分,完整的css部分在最后 <div class"chargerBox"><div class"ch…

Vue ref获取元素和组件实例

获取元素 获取元素还不简单&#xff1f;直接document.querySelector(“#id”)不就获取到了吗&#xff1f;例如下面的代码。在写Vue的过程中&#xff0c;我们从来不会写这种代码&#xff0c;但是下面的代码在vue里面是可以运行的。 methods:{getEl(){let title document.queryS…

CSS实现: 水平居中 的几种方法

实现方法&#xff1a; 1、添加 margin 值 auto 2、定位 position(子绝父相) 偏移值 left margin-left 回退 [ 需要计算&#xff0c;有点 麻烦 ] 3、定位 position(子绝父相) 偏移值 left CSS-2d transform 4、文字居中 text-align:center; 行内块元素 5、弹性盒子布局 [ 推…

vue之@click绑定的函数,如何实现加不加括号都可执行

这篇文章的由来&#xff0c;其实是朋友在群里好奇click绑定方式的种类&#xff0c;大家七嘴八舌讨论出来的&#xff0c;觉得过程还是比较有意义&#xff0c;就记录下来&#xff1a; 1、原生js绑定点击事件 好久不用原生js绑定事件&#xff0c;基本都已经忘了怎么绑定。还把括号…