Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ScrollMagic window is not defined during gatsby build #13141

Closed
albertkimdev opened this issue Apr 5, 2019 · 3 comments
Closed

ScrollMagic window is not defined during gatsby build #13141

albertkimdev opened this issue Apr 5, 2019 · 3 comments
Labels
type: question or discussion Issue discussing or asking a question about Gatsby

Comments

@albertkimdev
Copy link

albertkimdev commented Apr 5, 2019

Description

I am trying to build my gatsby app using ScrollMagic.

I see this error when I run gatsby build

error Building static HTML failed

See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html

  35 |
  36 |  // TODO: temporary workaround for chrome's scroll jitter bug
> 37 |  window.addEventListener("mousewheel", function () {});
     | ^
  38 |
  39 |  // global const
  40 |  var PIN_SPACER_ATTRIBUTE = "data-scrollmagic-pin-spacer";

 - ScrollMagic.js:37 Object.<anonymous>
    [lib]/[scrollmagic]/scrollmagic/uncompressed/ScrollMagic.js:37:1

ScrollMagic has an error with the window being undefined.

Steps to reproduce

Create a gatsby project and add scrollmagic and gsap

Create a gatsby-node.js file to add some custom webpack config like

const Path = require('path')

exports.onCreateWebpackConfig = ({
  stage,
  rules,
  loaders,
  plugins,
  actions,
}) => {
  actions.setWebpackConfig({
    resolve: {
      alias: {
        TweenLite: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TweenLite.js'
        ),
        TweenMax: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TweenMax.js'
        ),
        TimelineLite: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TimelineLite.js'
        ),
        TimelineMax: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TimelineMax.js'
        ),
        ScrollMagic: Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/ScrollMagic.js'
        ),
        'animation.gsap': Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap.js'
        ),
        'debug.addIndicators': Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/plugins/debug.addIndicators.js'
        ),
      },
    },
  })
}

In your component add

import ScrollMagic from 'ScrollMagic'

require('animation.gsap')
require('debug.addIndicators')

Write some scrollmagic code and try running gatsby build. It should have an error.

Expected result

A regular production gatsby build with scroll magic working as intended.

Actual result

Cannot make a production build for gatsby using scrollmagic

Environment

Run gatsby info --clipboard in your project directory and paste the output here.

System:
    OS: Windows 10
    CPU: (4) x64 Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
  Binaries:
    Yarn: 1.5.1 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
    npm: 5.6.0 - C:\Program Files\nodejs\npm.CMD
  Languages:
    Python: 2.7.15 - C:\Python27\python.EXE
  Browsers:
    Edge: 44.17763.1.0
  npmPackages:
    gatsby: ^2.2.11 => 2.2.11
    gatsby-plugin-react-helmet: ^2.0.10 => 2.0.11
    gatsby-plugin-styled-components: ^3.0.7 => 3.0.7
    gatsby-plugin-typography: ^2.2.10 => 2.2.10

error UNHANDLED REJECTION


  Error: The system cannot find the path specified.

  - envinfo.js:1 Function.e.exports.sync
    [v2]/[envinfo]/dist/envinfo.js:1:4970

  - envinfo.js:1 Object.copySync
    [v2]/[envinfo]/dist/envinfo.js:1:66948

  - envinfo.js:1 Object.t.writeSync.e [as writeSync]
    [v2]/[envinfo]/dist/envinfo.js:1:48777

  - envinfo.js:1
    [v2]/[envinfo]/dist/envinfo.js:1:46934

  - envinfo.js:1 Promise.all.then.e
    [v2]/[envinfo]/dist/envinfo.js:1:46949

  - next_tick.js:81 processTicksAndRejections
    internal/process/next_tick.js:81:5


error An unexpected error occurred: "Command failed.
Exit code: 1
Command: C:\\WINDOWS\\system32\\cmd.exe
Arguments: /d /s /c gatsby info --clipboard
Directory: C:\\Users\\Albert\\Documents\\Albert Site\\v2
Output:
".
info If you think this is a bug, please open a bug report with the information provided in "C:\\Users\\Albert\\Documents\\Albert Site\\v2\\yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
@pieh
Copy link
Contributor

pieh commented Apr 5, 2019

You get that error because window doesn't exist when static .html files are being built.

Following link to documentation from the error you get, you should use loaders.null() trick shown in https://www.gatsbyjs.org/docs/debugging-html-builds/#fixing-third-party-modules

For example:

const Path = require('path')

exports.onCreateWebpackConfig = ({
  stage,
  rules,
  loaders,
  plugins,
  actions,
}) => {
  actions.setWebpackConfig({
+   module: {
+     rules: stage === 'build-html'
+       ? [
+           {
+             test: /ScrollMagic/,
+             use: loaders.null(),
+           }
+         ]
+       : []
+   },
    resolve: {
      alias: {
        TweenLite: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TweenLite.js'
        ),
        TweenMax: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TweenMax.js'
        ),
        TimelineLite: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TimelineLite.js'
        ),
        TimelineMax: Path.resolve(
          'node_modules',
          'gsap/src/uncompressed/TimelineMax.js'
        ),
        ScrollMagic: Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/ScrollMagic.js'
        ),
        'animation.gsap': Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap.js'
        ),
        'debug.addIndicators': Path.resolve(
          'node_modules',
          'scrollmagic/scrollmagic/uncompressed/plugins/debug.addIndicators.js'
        ),
      },
    },
  })
}

And potentially add any other modules to loaders.null that will complain about not existing window object.

@pieh pieh added the type: question or discussion Issue discussing or asking a question about Gatsby label Apr 5, 2019
@albertkimdev
Copy link
Author

@pieh Hey that worked great! I also had to add

{
     test: /scrollmagic/,
     use: loaders.null(),
},

and it built properly, thanks!

@MichalMoravik
Copy link

Hey guys, @yongelee I have the same problem you had before. After I did:

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

It didn't show the error BUT scrollmagic does not work after gatsby build and gatsby serve. It just lost its functionality in production build. In development mode it works.

Could you, please, help me and tell me how you fixed this before? I would appreciate that! Thank you!

Here are versions of my packages:

"gsap": "^3.2.4",
"scrollmagic": "^2.0.5",

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: question or discussion Issue discussing or asking a question about Gatsby
Projects
None yet
Development

No branches or pull requests

3 participants