day1

scripts脚本命令触发至:@vue/cli-service/bin/vue-cli-service.js

//获取参数;
//前两个参数分别为node环境地址;运行的js文件地址;
const rawArgv = process.argv.slice(2);
/*利用minimist获取启动参数*/
var args = require('minimist')(process.argv.slice(2))

将参数解析为布尔类型;
var args = require(‘minimist’)(process.argv.slice(2), {
boolean: [‘hello’]
});

例:

node xxx.js --a
//args.a=true;
node xxx.js --a a
//args.a=a;
node xxx.js --a=1
//args.a=1;
**使用=传值是不能有空格**

输入npm run dev 启动时

1、调用 resolvePkg 获取package.json内容;
2、调用resolvePlugins 拿到包含package。json及commands、config文件内所有pugin;
3、调用run方法 加在配置、插件等。并启动。

1获取package.json内容

this.pkg = this.resolvePkg(pkg)resolvePkg(inlinePkg, context = this.context) {if (inlinePkg) {return inlinePkg}// 读取package.jsonconst pkg = resolvePkg(context)// 判断package.json中的键值对。if (pkg.vuePlugins && pkg.vuePlugins.resolveFrom) {this.pkgContext = path.resolve(context, pkg.vuePlugins.resolveFrom)return this.resolvePkg(null, this.pkgContext)}return pkg}

2、加载所有模块

this.plugins = this.resolvePlugins(plugins, useBuiltIn)resolvePlugins(inlinePlugins, useBuiltIn) {const idToPlugin = id => ({// './asd/asdf  => built-in:/asd/asdf'id: id.replace(/^.\//, 'built-in:'),apply: require(id)// id: built-in:/commands/serve// apply: require('./commands/serve)})let plugins------------------------return plugins;/**plugins: [{id: 'built-in:commands/serve',apply: [Function] { defaultModes: [Object] }      },{id: 'built-in:commands/build',apply: [Function] { defaultModes: [Object] }      },{id: 'built-in:commands/inspect',apply: [Function] { defaultModes: [Object] }      },{ id: 'built-in:commands/help', apply: [Function] },{ id: 'built-in:config/base', apply: [Function] },  { id: 'built-in:config/css', apply: [Function] },   { id: 'built-in:config/prod', apply: [Function] },  { id: 'built-in:config/app', apply: [Function] },   { id: '@vue/cli-plugin-babel', apply: [Function] }, { id: '@vue/cli-plugin-pwa', apply: [Function] },   { id: '@vue/cli-plugin-router', apply: [Function] } ]*/

3、加载所有模式

this.modes = this.plugins.reduce((modes, {apply: {defaultModes}}) => {return Object.assign(modes, defaultModes)}, {})
//modes: { serve: 'development', build: 'production', inspect: 'development' }

4、调用servicerun方法;启动;

service.run(command, args, rawArgv).catch(err => {error(err)process.exit(1)
})
/**
command: serve  //启动指令;
args: {     // 启动参数;_: [ 'serve' ],......mode: 'dev'
}
rawArgv: [ 'serve', '--mode', 'dev' ] //启动参数;
*/

run方法的执行

async run(name, args = {}, rawArgv = []) {// 配置中有无声明模式,默认为development;const mode = args.mode || (name === 'build' && args.watch ? 'development' : this.modes[name])// --skip-plugins arg may have plugins that should be skipped during init()this.setPluginsToSkip(args)// load env variables, load user config, apply pluginsthis.init(mode) let command = this.commands[name] args._.shift() // remove command itselfrawArgv.shift() const {fn} = commandconsole.log('command:', command)return fn(args, rawArgv)}

init 方法;

this.loadEnv(mode);
// 获取、设置全局process.env.node_env;如果不是production || test ,全部替换为development;loadUserOptions();//加载vue.config.js 中的所有内容;//然后合并:node_modules\@vue\cli-service\lib\options.js// ``````````````````````this.plugins.forEach(({id,apply}) => {if (this.pluginsToSkip.has(id)) returnapply(new PluginAPI(id, this), this.projectOptions)})// 循环加载PluginAPI 实例;将plugin和config挂载到实例;if (this.projectOptions.chainWebpack) {this.webpackChainFns.push(this.projectOptions.chainWebpack)}// 合并;init结束

vue/cli4、webpack 简阅(希望能持续更新)相关推荐

  1. Vue -- 指令【学习笔记】(持续更新)

    Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...

  2. 针对Vue的后台权限功能实现思路(持续更新)

    2019独角兽企业重金招聘Python工程师标准>>> 权限是一块设计挺繁琐的功能,尤其是设计到前端SPA应用,前后端的耦合性太强,先屡屡思路,再实现,如果您有好的建议,也可评论留言 ...

  3. JS 小程序 Vue 2022年最全面试题!持续更新

    vue面试题 核心原理部分 mvc mvvm和mvp的区别? MVVM 就是 Model-View-ViewModel 的缩写,MVVM 将视图和业务逻辑分开. View:视图层,Model 数据模型 ...

  4. vue init webpack缺少标识符_Vue脚手架热更新技术探秘

    前言 热替换(Hot Module Replacement)或热重载(Hot Reload)是指在不停机状态下,实时更新,在前端利于来说,在各大框架中及库中都有体现,比如NG从5开始就提供了热更新,R ...

  5. vue开发常用css,js(持续更新)

    目录 1.文字溢出显示三个点 2.input 框光标左边距 3.水平垂直居中常用写法 1)position属性实现 2)flex属性实现 4.input框消除空格 5.纯css实现箭头 6.箭头在上面 ...

  6. Vue经典面试题及答案汇总(持续更新)

    1.虚拟DOM中key的作用: key是虚拟DOM对象的标识,当状态中的数据发生变化时,Vue会根据[新数据]生成[新的虚拟DOM],随后Vue进行[新虚拟DOM]的差异比较,比较规则如下:     ...

  7. 前端js vue遇到的一些简单的数据处理-持续更新

    1. 数据处理: 直接从后台返回数据取出自己想要的属性,并将其修改成自己想要的属性名: list - 为需要处理的数组 value label: 是想要需要的属性名 item.nichname ite ...

  8. Vue的各种杂乱知识点整理(持续更新中...)

    2021-09-17(安卓系统和ios系统时间格式的差异) 例:2021-09-17 在安卓系统中正常,在ios系统中报错. 在安卓中 yyyy-MM-dd 和 yyyy/MM/dd 的时间格式都支持 ...

  9. vue引入全局静态变量_vue-cli4 全面配置(持续更新)

    https://github.com/staven630/vue-cli4-config​github.com vue-cli4 全面配置(持续更新) 细致全面的 vue-cli4 配置信息.涵盖了使 ...

最新文章

  1. oracle替换表merge,sql – Oracle – 如何使用merge根据其他表和列中的值更新列
  2. ASP:FileSystemObject处理文件
  3. 科大星云诗社动态20210901
  4. 【转】Android 最火框架XUtils之注解机制详解
  5. ios控制中心android版,IOS控制中心
  6. 关于sql server 代理(已禁用代理xp)
  7. 190428每日一句
  8. 在大多数人转向.NET和JAVA阵营的时候,我正在悄悄地向古老的COBOL招手
  9. 鸿蒙系统桌面天气如何设置,怎么设置桌面时间和天气预报?
  10. python播放音乐同步歌词_使用python播放音乐并制作LRC歌词文件
  11. Ubuntu 下串口调试工具
  12. python 开发管理软件 ERP
  13. 数学中常见的maxmin,min max
  14. 2022年,计算机er保研选计科还是电信?
  15. Android手机电池耐用吗,八款超长待机的智能手机 大容量电池十分耐用
  16. latex怎么看论文字数_LaTeX | 为学术论文排版而生【公式篇】
  17. 微信公众平台修改服务器,微信公众平台开发配置及自定义分享
  18. app开通支付宝支付简要流程
  19. 基于javaweb的房地产客户关系管理系统(java+jsp+javascript+servlet+mysql)
  20. RFID电子标签的七大特点

热门文章

  1. 员工积分制管理系统V1.0 介绍
  2. 小程序直播如何做好直播带货
  3. 【C语言刷题】字符串逆序
  4. PDF加密文件解密方法(解除复制打印限制)——转帖
  5. 高精度电子罗盘的应用场景
  6. 微信 html 压缩,微信视频过大如何发送 微信视频过大怎么压缩 微信怎样发送超过20M的视频...
  7. win7打开资源管理器显示计算机而不是库
  8. C++实现无头结点单链表
  9. linux hz是多长时间,linux的HZ, Tick, Jiffies
  10. Python可以开发哪些程序?