使用Webpack加载程序时“找不到模块”

瓦莱里亚·史宾纳(Valeria Shpiner)

我通过Next.js为我的应用程序使用自定义Webpack:

const path = require('path');
const Webpack = require('webpack');

module.exports = {
  webpack: (config, { dev }) => {
    config.plugins.push(
      new Webpack.DefinePlugin([{
          __BROWSER__: "typeof window !== 'undefined'",
          __NETLIFY_BRANCH__: JSON.stringify(process.env.BRANCH),
          __CONFIG__: JSON.stringify({
            GRAPHQL_URL: process.env.GRAPHQL_URL,
            SEGMENT_WRITEKEY: process.env.SEGMENT_WRITEKEY,
          }),
        }])
      )
      config.module.rules.push(
        {
          test: /\.png$/,
          use: {
          loader: 'url-loader',
           options: {
             limit: 10000,
             name: 'graphics/[name].[ext]',
           },
         },
       },
       {
      test: /\.svg$/,
      loader: [
        {
          loader: 'babel-loader',
          query: {
            presets: ['es2015']
          }
        },
        {
          loader: 'svg-react-loader',
        },
        {
          loader: 'string-replace-loader',
          options: {
            search: ' xmlns="http://www.w3.org/2000/svg"',
            replace: '',
                    },
                  },
                ],
              },
            );
      return config;
  },
};

但是,当我尝试将图像添加到组件中时,启动了本地主机,但收到错误消息:

Cannot find module '../assets/logo.svg'

我像往常一样将图像导入组件,没有图像,我的应用程序正在运行。也许我应该在Webpack中添加一些内容?所有图像均在目录资产中设置。

import logo from '../assets/logo.svg'; 

export default class Layout extends React.Component {
render () {
    return (
    <img src={logo} alt="logo" />
  )
 }
}
罗伯特克莱普

问题(据我了解:https//github.com/zeit/next.js/issues/544)是,Next.js不使用Webpack进行服务器端渲染,而仅用于客户端,因此您当它只是一个客户端React项目时(例如,通过添加.svg文件规则并通过加载程序链运行这些文件),无法像您一样导入SVG

一种可能的解决方案是提到这里,其中SVG进口不通过的WebPack装载机完成,但是由巴贝尔(其关于在Next.js服务器端代码中使用)。

似乎对我有用,像这样:

  • npm i babel-plugin-inline-react-svg --save
  • 将以下内容添加/合并到您的Babel配置中(有关如何在此处设置自定义Babel配置的更多信息):

     "plugins": [
       "inline-react-svg"
     ]
    
  • 在您的组件/页面中,使用它(变量名LogoSVG,很重要,不应更改):

    import LogoSVG from '../assets/logo.svg';
    
  • 并将其用作React组件:

    return <LogoSVG alt="logo" />
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在webpack中使用加载程序时出错

使用Ant运行Java程序时找不到或加载主类?

找不到模块“webpack”

找不到用于加载图像的模块“gifsicle”-webpack

被Webpack捆绑后,NodeJS应用程序找不到模块

我收到“ DLL加载失败:找不到指定的模块”。将Cython与Numpy程序配合使用时

使用pyenv和virtualenv在apache后面部署flask应用程序时找不到numpy,pandas模块

Webpack-Sass加载程序找不到图像

使用Redux chrome扩展程序时“找不到存储区”

找不到webpack入口模块

找不到模块'webpack'-Angular

Webpack 找不到入口模块

找不到Webpack外部模块

Webpack找不到模块“电子”

找不到模块'webpack' - BigCommerce

使用Webpack时找不到导入模块的字体文件

Typescript找不到使用Webpack别名导入的模块

使用Webpack时,节点找不到模块“ fs”

使用karma-webpack时找不到模块错误

未捕获的错误:使用Webpack时找不到模块“ fs”

Webpack缺少模块“找不到模块”

Webpack的“模块”的“找不到模块”:“ esnext”

ModuleNotFoundError - 在 Pycharm 智能感知中找到的模块,但在执行程序时找不到

部署无服务器应用程序时找不到模块自动完成功能

运行gulp应用程序时找不到模块'require-dir'错误:serve rails

执行新应用程序时出现 Angular 7 错误,错误:找不到模块“temp”,

在ibm云上启动应用程序时找不到模块'ibmbluemix'

加载应用程序时找不到启动器活动

找不到模块:错误:无法解析模块“组件/应用程序”。webpack + reactjs问题