导入没有 .vue 扩展名的 *.vue 文件时出现以下错误?

Posted

技术标签:

【中文标题】导入没有 .vue 扩展名的 *.vue 文件时出现以下错误?【英文标题】:I get following error when I import *.vue files without .vue extension? 【发布时间】:2017-11-01 15:02:13 【问题描述】:

导入没有 .vue 扩展名的 vue 文件时出现以下错误。

错误 ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue 未找到模块:错误:无法解析“./components/Navbar”

我的网页后台配置如下

module: 
    rules: [
      
        test: /\.vue$/,
        loader: 'vue-loader',
        options: 
          loaders: 
            // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
            // the "scss" and "sass" values for the lang attribute to the right configs here.
            // other preprocessors should work out of the box, no loader config like this necessary.
            'scss': 'vue-style-loader!css-loader!sass-loader',
            'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'
          
          // other vue-loader options go here
        
      ,
      
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      ,
      
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file-loader',
        options: 
          name: '[name].[ext]?[hash]'
        
      
    ]
  ,
  resolve: 

    alias: 
      'vue$': 'vue/dist/vue.esm.js'
    
  ,

【问题讨论】:

【参考方案1】:

问题出在 Webpack 配置中。

通过在 Webpack 中包含扩展数组 resolve 使 Webpack 自动解析 .vue 扩展

 resolve: 
    extensions: ['.vue'],
   ,

【讨论】:

vue js中默认包含这个扩展,可以用vue inspect查看,添加这个扩展对我没有任何影响【参考方案2】:

问题出在您的 Webpack 配置中。要让 Webpack 自动解析 .vue 扩展,请使用 resolve.extensions 选项,并包含默认值。

resolve: 
    extensions: ['*', '.js', '.vue', '.json']

【讨论】:

这对我有用,但我不明白为什么。这如何让 Webpack 知道当你导入一个没有扩展名的模块时,它实际上是一个 Vue 文件? @Neil webpack.js.org/configuration/resolve/#resolveextensions。如果您没有提供,它会猜测您的文件扩展名是什么。这是它会猜测的顺序(如果两个文件具有相同的扩展名)【参考方案3】:

解决方案是对所有 import 语句禁用 eslint。

/*eslint-disable */
import DashboardLayout from '../layouts/DashboardLayout';

//after all import statements, you enable eslint.
/*eslint-enable */

这个问题是airbnb eslint预设特有的。

【讨论】:

【参考方案4】:

如果您关注 eslint 并收到此错误,请尝试在您的 eslint 配置中添加以下行

...
rules: 
    // other stuff
    "import/extensions": ["error", "always", 
      "js": "never",
      "mjs": "never",
      "jsx": "never",
      "ts": "never",
      "tsx": "never",
      "vue": "never"
    ]
  ,
...

【讨论】:

以上是关于导入没有 .vue 扩展名的 *.vue 文件时出现以下错误?的主要内容,如果未能解决你的问题,请参考以下文章

尝试导入时出现 Uncaught SyntaxError: Unexpected identifier error

在 nativescript-vue 项目上的 axios 导入时出现意外的令牌错误

检索数据时出现 Vue/Firestore/Firebase 错误

vue导入的xlsx没有数据

使用 lodash 和 Jest 测试 Vue 组件时出现“orderBy”未定义错误

将 Bootstrap/Bootstrap-Vue 导入 Scoped CSS