Lazysizes: webpack and lazySizesConfig

Created on 27 Jul 2017  路  6Comments  路  Source: aFarkas/lazysizes

When loading lazysizes via import lazySizes from 'lazysizes'; and bundling it with webpack it is executed immediately (in the browser) and I can't seem to find a way to set lazySizesConfig before lazysizes executes.

Does someone know how I can set lazySizesConfig to the window object, so it's available for lazysizes before it runs, in a webpack-context?

Most helpful comment

@thasmo

You don't need to. Although lazySizesConfig is generated immediately with importing, lazysizes is not initialized immediately. As soon as you are using import I also suggest to do not use lazySizesConfig at all and use lazySizes.cfg instead.

You can do something like this:

import lazySizes from 'lazysizes';
import 'lazysizes/plugins/respimg/ls.respimg';
import 'lazysizes/plugins/optimumx/ls.optimumx';

//lazySizes.cfg == window. lazySizesConfig
Object.assign(lazySizes.cfg, {
    yourOptionA: 'foo',
    yourOptionB: 'bar',
});

//lazySizes.init();

Did this help?

All 6 comments

@thasmo

You don't need to. Although lazySizesConfig is generated immediately with importing, lazysizes is not initialized immediately. As soon as you are using import I also suggest to do not use lazySizesConfig at all and use lazySizes.cfg instead.

You can do something like this:

import lazySizes from 'lazysizes';
import 'lazysizes/plugins/respimg/ls.respimg';
import 'lazysizes/plugins/optimumx/ls.optimumx';

//lazySizes.cfg == window. lazySizesConfig
Object.assign(lazySizes.cfg, {
    yourOptionA: 'foo',
    yourOptionB: 'bar',
});

//lazySizes.init();

Did this help?

Wow, that's super easy. Thanks for the quick response, works flawlessly! Is this mentioned in the docs or somewhere else? Thanks!

Just chiming in to say this snippet was useful and works as advertised when bundling modules with webpack and using import with plugins!

For some reason this didn't work for a project we're working on currently. lazySizes was executing before Object.assign was called. I had to change how lazySizes gets loaded and executed, and it looks a bit odd:

(window as any).lazySizesConfig = {
    init: false,
    hFac: 10,
    loadMode: 1,
    lazyClass: 'js-lazy',
    loadingClass: 'is-loading',
    loadedClass: 'is-loaded',
    throttleDelay: 100,
};

new Promise((resolve) => {
    if ('HTMLPictureElement' in window) {
        resolve();
    }
    import('picturefill').then(() => resolve());
}).then(() => {
    Promise.all([
        import('lazysizes'),
        import('lazysizes/plugins/object-fit/ls.object-fit'),
    ]).then(([lazySizes]) => {
        lazySizes.init();
    });
});

It would be really useful if lazySizes would not be self-executing and options could just be passed directly without the need for a global variable.

import lazySizes from 'lazysizes';

lazySizes.init({
    hFac: 10,
    loadMode: 1,
    lazyClass: 'js-lazy',
    loadingClass: 'is-loading',
    loadedClass: 'is-loaded',
    throttleDelay: 100,
});

Optimally, something like this would be possible too then:

import lazySizes from 'lazysizes';
import 'lazysizes/plugins/object-fit/ls.object-fit';

new Promise((resolve) => {
    if ('HTMLPictureElement' in window) {
        resolve();
    }
    import('picturefill').then(() => resolve());
}).then(() => {
    lazySizes.init({
        hFac: 10,
        loadMode: 1,
        lazyClass: 'js-lazy',
        loadingClass: 'is-loading',
        loadedClass: 'is-loaded',
        throttleDelay: 100,
    });
});

In our case, the window.lazySizes.cfg.rias.widths property was overridden by the defaults widths array.
We solved it like this:

import '../configs/lazysizesconfig';
import 'lazysizes/plugins/rias/ls.rias';
import 'lazysizes/plugins/respimg/ls.respimg';
import 'lazysizes/plugins/print/ls.print';
import 'lazysizes/plugins/parent-fit/ls.parent-fit';
import 'lazysizes/plugins/optimumx/ls.optimumx';
import 'lazysizes/plugins/aspectratio/ls.aspectratio';
import lazySizes from 'lazysizes';
// lazysizesconfig.js
window.lazySizesConfig = {
    rias: {
        widths: [
            270,
            320,
            372,
            480,
            560,
            // ...
        ]
    }
};
Was this page helpful?
0 / 5 - 0 ratings

Related issues

ymantijunk picture ymantijunk  路  5Comments

jpw123 picture jpw123  路  6Comments

zenderol picture zenderol  路  5Comments

Legic picture Legic  路  4Comments

virginiarcruz picture virginiarcruz  路  3Comments