WebpackError: ReferenceError: Image is not defined在“gatsby develop”的“gatsby build”期间工作正常

问题描述

**Failed Building static HTML for pages - 3.572s**

 ERROR #95313 

Building static HTML Failed for path "/"

See our docs page for more info on this error: https://gatsby.dev/debug-html


  38 |             thrershold: 0,39 |             disableDragImage: function () {
> 40 |                 var transparent = new Image();
     | ^
  41 |                 transparent.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';      
  42 |                 return transparent;
  43 |             }()


  ***Webpackerror: ReferenceError: Image is not defined***
  
  - index.js:40 
    node_modules/react-carousel-slider/es/index.js:40:1
  
  - index.js:43 
    node_modules/react-carousel-slider/es/index.js:43:14

解决方法

尝试在您的 gatsby-node.js 中使用以下代码段:

exports.onCreateWebpackConfig = ({ stage,loaders,actions }) => {
  if (stage === "build-html") {
    actions.setWebpackConfig({
      module: {
        rules: [
          {
            test: /react-carousel-slider/,use: loaders.null(),},],})
  }
}

一些 third-party dependencies use some global objects like window or document 来制作他们的东西。这在运行 gatsby develop 时完全有效,因为代码是在浏览器端编译的。但是,gatsby build 出现在显然没有窗口的服务器端(您的 Node 服务器)中,因为它甚至还没有定义。

这就是为什么您需要通过调用 onCreateWebpackConfig API 将 null 加载器添加到 webpack 的配置中,以避免服务器端的依赖转换。

规则是一个正则表达式(这就是为什么在斜杠之间),字面意思是,test 值与 node_modules 文件夹中的路径匹配以查找依赖项位置,因此,您必须将其放在那里确切的文件夹名称。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...