npm run dev 过程发生了什么?

  1. npm run *** 是执行配置在package.json中的脚本,比如:
"scripts": {

   "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",  

  "start": "npm run dev", "lint": "eslint --ext .js,.vue src",

  "build": "node build/build.js"

},

npm run dev 执行的就是webpack-dev-server --inline --progress --config build/webpack.dev.conf.js命令

  1. webpack.dev.conf文件通过merge引用了webpack.base.conf.js文件
const baseWebpackConfig = require('./webpack.base.conf')
  1. 在webpack.base.conf.js文件中调用了./src/main.js
entry: {

   app: './src/main.js'

  },
  1. main.js用到了一个html元素#app,并创建了一个vue

new Vue({

   el: '#app',  

  router,

  components: { App },

   template: '<App/>'

  })

5.创建的vue会插入到webpack.dev.conf.js配置中HtmlWebpackPlugin配置的文件中


new HtmlWebpackPlugin({

  filename: 'index.html',

  template: 'index.html',

  inject: true

  }),

6.main.js中配置了router-view,router-view会加载HelloWorld.vue并插入到index.html的中

转载:https://www.cnblogs.com/KoBe-bk/articles/13541664.html







以vue cli 3配置为例,

"scripts":{
"dev":"vue-cli-serviceserve",
"serve":"vue-cli-serviceserve",
"build":"vue-cli-servicebuild",
"lint":"vue-cli-servicelint"
}

当执行npm run dev后

npm会去package.json里边的scripts字段里找dev这个命令

如果配置了的话,就会执行对应的配置vue-cli-service serve

vue-cli-service也是一个命令,当npm的脚本执行的时候就会去执行当前项目目录下的node_modules/.bin/vue-cli-service.cmd这个文件(可自行查看源码)

vue-cli-service.cmd这个文件又会用node执行@vue\cli-service\bin\vue-cli-service.js文件(可自行查看源码)

vue-cli-service.js这个文件里加载着(两层加载)对应的命令处理文件(@vue\cli-service\bin\commands\serve.js文件写着可执行的命令)

然后你就会发现它加载了webpack-dev-server这个包(也就是说vue-cli-service是基于这个包实现的)(可自行查看源码)

然后再看webpack-dev-server这个包,它又是基于express实现的

express又是一个node框架,它起的web服务器底层调用的实际是node的http这个核心模块

这时就出现一个调用链条npmrundev->vue-cli-serviceserve->webpack-dev-server->express->node->http(vue-cli2的配置少了vue-cli-service这层封装)

所以得出结论:vue在npmrundev后为什么就在localhost运行了?这个问题的实质是用node调用http模块启用了一个web服务器。

作者:Nicander 链接:https://www.jianshu.com/p/09717b23dca7 来源:简书