npm run dev 过程发生了什么?
- 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命令
- webpack.dev.conf文件通过merge引用了webpack.base.conf.js文件
const baseWebpackConfig = require('./webpack.base.conf')
- 在webpack.base.conf.js文件中调用了./src/main.js
entry: {
app: './src/main.js'
},
- 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 来源:简书