编写webpack配置文件
安装包1
2
3
4
5
6
7
8npm install --save-dev vue-loader@8 babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015 css-loader vue-style-loader vue-hot-reload-api@1 vue-html-loader
npm install --save-dev webpack-merge
npm install --save-dev html-webpack-plugin
npm install --save-dev webpack-dev-server
npm install vue-router
npm install vuex
注意事项

Invalid configuration object. Webpack has been initialised using a configuration object that does not ma
tch the API schema. - configuration has an unknown property ‘mode’. These properties are valid:
object { amd?, bail?, cache?, context?, dependencies?, devServer?, devtool?, entry, externals?, loader?, module?, name?, node?, output?, parallelism?, performance?, plugins?, profile?, recordsInputPath?, recordsOutputPath?,
recordsPath?, resolve?, resolveLoader?, stats?, target?, watch?, watchOptions? }
在网上查阅了相关资料,有的说是module.loaders需要改成module.rules,有的说是需要删掉项目依赖,然后重新安装一遍并且webpack-dev-server要全局安装,我仔细看了一下跟我的demo情况都不太符合,然后我看了一下视频教程中的webpack-dev-server的版本是2.9.7的,而我安装的是v3.2.1的,我在想是不是版本兼容问题,然后去webpack-dev-server的github网站上查看了版本发布日志,发现了这个东西

在webpack-dev-server的3.0.0版本开始,只兼容webpack4及以上版本,不再兼容webpack3及一下版本了,然后我就将项目中的webpack-dev-server的npm包删掉,重新下载并且指定版本: npm install webpack-dev-server@2.9,然后npm就帮我下了v2.9.7的包,然后我再运行一遍node_modules/.bin/webpack-dev-server就能成功开启服务器了。
所以以后遇到这种感觉不像是webpack配置问题,并且终端报错中没有明确指出是哪一块的问题的,可以仔细检查一下是否webpack或某些包和新版本的包存在某些兼容问题
Vue packages version mismatch:
- vue@2.5.13
- vue-template-compiler@2.5.13
1
2
3#vue 与 vue-template-compiler 版本要一致
npm install vue@2.5.13 -D
npm install vue-template-compiler@2.5.13 -D
在升级脚手架到vue-cli3.0版本的时候出现了这个报错:
我在这里大概说一下出现这个报错的原因在哪里和解决办法
原因
vue有两种形式的代码 compiler(模板)模式和runtime模式(运行时),vue模块的package.json的main字段默认为runtime模式, 指向了”dist/vue.runtime.common.js”位置。
这是vue升级到2.0之后就有的特点。
而我的app.vue文件中,初始化vue却是这么写的,这种形式为compiler模式的,所以就会出现上面的错误信息1
2
3
4
5
6
7
8// compiler
new Vue({
el: '#app',
router: router,
store: store,
template: '<App/>',
components: { App }
})
解决办法
将app.vue中的代码修改如下就可以1
2
3
4
5
6//runtime
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app")
到这里我们的问题还没完,那为什么之前是没问题的,之前vue版本也是2.x的呀?
这也是我要说的第二种解决办法
因为之前我们的webpack配置文件里有个别名配置,具体如下1
2
3
4
5resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js' //内部为正则表达式 vue结尾的
}
}
也就是说,import Vue from ‘vue’ 这行代码被解析为 import Vue from ‘vue/dist/vue.esm.js’,直接指定了文件的位置,没有使用main字段默认的文件位置
所以第二种解决方法就是,在vue.config.js文件里加上webpack的如下配置即可,1
2
3
4
5resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
}
既然到了这里我想很多人也会想到第三中解决方法,那就是在引用vue时,直接写成如下即可1
import Vue from 'vue/dist/vue.esm.js'
配置Vuex
1 | 其他 几个概念: |