Nuxt - 模块解析失败:意外字符“#”

Posted

技术标签:

【中文标题】Nuxt - 模块解析失败:意外字符“#”【英文标题】:Nuxt - Module parse failed: Unexpected character '#' 【发布时间】:2019-07-18 02:56:09 【问题描述】:

为什么我会收到以下警告:

<img :src="getImgUrl(post.thumbnail.src)" :>

  methods: 
    getImgUrl(pic) 
      return require( '~/assets/' + pic )
    
  

终端警告:

Module parse failed: Unexpected character '#' (1:0)                                               friendly-errors 16:58:06
You may need an appropriate loader to handle this file type.
> # ASSETS
| 
| **This directory is not required, you can delete it if you don't want to use it.**
                                                                                                  friendly-errors 16:58:06
 @ ./assets sync ^\.\/.*$
 @ ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./pages/work/index.vue?vue&type=script&lang=js&
 @ ./pages/work/index.vue?vue&type=script&lang=js&
 @ ./pages/work/index.vue
 @ ./.nuxt/router.js
 @ ./.nuxt/index.js
 @ ./.nuxt/client.js
 @ multi eventsource-polyfill webpack-hot-middleware/client?reload=true&timeout=30000&ansiColors=&overlayStyles=&name=client&path=/__webpack_hmr/client ./.nuxt/client.js

有什么办法可以解决这个问题吗?

【问题讨论】:

【参考方案1】:

通过查看出错的文件内容,您可以看到它是一个降价文件。如果您检查您的assets 文件夹,则有一个README.md 文件。这是 webpack 无法“理解”的。

为什么 webpack 会尝试解析 markdown 文件?好吧,在您的动态 require 中,您已指定您可以请求 ~/assets 内的任何文件,因此 webpack 必须解析它在那里遇到的所有文件。

您可以通过以下任一方式解决此问题:

删除README.md 文件

指定您可能需要的扩展,以便 webpack 可以调整其匹配器:

require( '~/assets/' + pic + '.jpg')

这个很有限,因为现在你只能使用jpg图片,调用函数时必须去掉扩展。

使用require.context,它允许您匹配基于正则表达式的文件(在这种情况下,所有.md结尾的文件)

getImgUrl(pic) 
  let context = require.context('~/assets/', false, /^(?!.*\.(?:md)$).*/);
  return context('./' + pic);

如果您使用子目录,您可能需要将第二个参数(文档中的useSubdirectories)更改为true。此外,您可能需要调整 ./ 重复斜杠的连接。

基于Webpack - Require.context -How to require all .js files except `_test.js` in a directory?和https://github.com/survivejs/webpack-book/issues/80#issuecomment-216068406的函数

【讨论】:

感谢您的回答!第二种选择可能是最不实用的。但是对于第三个选项Cannot find module './/images/sample-1.jpg',我得到了这个错误。我的图片来源类似于src: '/images/sample-1.jpg' 应该设置为true - require.context('~/assets', true, /^(?!.*\.(?:md)$).*/)

以上是关于Nuxt - 模块解析失败:意外字符“#”的主要内容,如果未能解决你的问题,请参考以下文章

React 模块解析失败:意外字符“@”

模块解析失败:意外字符“@”(1:0)

webpack 4 - 模块解析失败:简单 JS 文件上的意外字符 '�' (1:0)

模块解析失败:将 React on Rails 与 Antd 一起使用时出现意外字符“@”。

Rails 6 无法导入纱线依赖项:未捕获错误:模块解析失败:意外字符“#”(1:0)

在 Angular + Electron 应用程序中使用 better-sqlite3:模块解析失败:意外字符