Vue.js打包报错[Cannot find module 'vue-loader/lib/plugin']如何解决?

星级:
Webpack打包Vue.js报错[Cannot find module 'vue-loader/lib/plugin']主要是由于vue-loader升级到v-16之后,开始采用解构赋值引入VueLoaderPlugin导致的,只需要根据vue-loader的最新文档采用[const { VueLoaderPlugin } = require('vue-loader')]方式引入VueLoaderPlugin即可完美解决问题;

Webpack打包Vue.js项目时,根据官方文档在 [webpack.config.js] 中配置 [vue-loader

const VueLoaderPlugin = require('vue-loader/lib/plugin'); 


module.exports = {
entry: path.join(__dirname,'./src/main.js'),
output: {
path: path.join(__dirname, './dist'),
filename: 'bundle.js'
},
plugins: [
new VueLoaderPlugin()
],
module: {
rules: [
{test: /\.vue$/, use: 'vue-loader'}
]
}
};

打包时却意外报错[Cannot find module 'vue-loader/lib/plugin'],

Error: Cannot find module 'vue-loader/lib/plugin'

at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)

【解决方案】

对于以上问题,原因其实很简单,那就是[vue-loader] 官方从v-16.0.0版本开始就已经放弃了上述的引入方式,改以解构引入方式引入VueLoaderPlugin,详情可参考最新的官方文档

https://vue-loader.vuejs.org/guide/#manual-setup

以下为 [vue-loader] 官方文档中提供的配置案例

// webpack.config.js

const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
module: {
rules: [
// ... other rules
{
test: /\.vue$/,
loader: 'vue-loader'
}
]
},
plugins: [
// make sure to include the plugin!
new VueLoaderPlugin()
]
}

所以,对于安装[vue-loader@16.0.0]以上版本的用户,只要按照最新的方式配置,就能完美地解决问题。

如果你去查看node_modules中 [vue-loader]的包,你也可以发现,里面确实根本不存在【vue-loader/lib/plugin】这样的文件夹路径。

另外,网上有很多人建议将[vue-loader] 进行降级处理,安装[vue-loader@15] 版本,这里并不建议这样做,因为这并不能从根本上解决问题,毕竟日后升级之后还是要面对这个问题,而且[vue-loader] 是需要和[vue-template-compiler] 配合使用的,当[vue-loader] 和[vue-template-compiler] 版本差距过大,编译依旧会失败。