Code Monkey home page Code Monkey logo

Comments (3)

kleisauke avatar kleisauke commented on July 30, 2024

It looks like Next.js is encountering some issues when attempting to bundle wasm-vips' ES6 modules, related to the new URL('./', import.meta.url) syntax.

If you want to enable wasm-vips solely for server-side rendering (SSR), you can use this config:
next.config.js:

/** @type {import('next').NextConfig} */
const nextConfig = {
    webpack: (config) => {
        // Disable evaluating of `import.meta.*` syntax
        // https://webpack.js.org/configuration/module/#moduleparserjavascriptimportmeta
        config.module.parser.javascript.importMeta = false;

        // Disable parsing of `new URL()` syntax
        // https://webpack.js.org/configuration/module/#moduleparserjavascripturl
        config.module.parser.javascript.url = false;

        // Alternatively, to bundle the CommonJS module:
        // Ensure "require" has a higher priority when matching export conditions.
        // https://webpack.js.org/configuration/resolve/#resolveconditionnames
        //config.resolve.conditionNames = ['require'];

        return config;
    }
}

module.exports = nextConfig;

To use wasm-vips in client-side environments, it remains essential to opt-in to a cross-origin isolated state and serve vips.js, vips.wasm and vips.worker.js from the same directory. Assuming these files are in the public/ directory, you could do this:
next.config.js:

/** @type {import('next').NextConfig} */
const nextConfig = {
    async headers() {
        return [
            {
                source: '/:path*',
                headers: [
                    {
                        key: 'Cross-Origin-Embedder-Policy',
                        value: 'require-corp'
                    },
                    {
                        key: 'Cross-Origin-Opener-Policy',
                        value: 'same-origin'
                    }
                ]
            }
        ]
    },
    webpack: (config) => {
        // Ensure "require" has a higher priority when matching export conditions.
        // https://webpack.js.org/configuration/resolve/#resolveconditionnames
        config.resolve.conditionNames = ['require'];

        return config;
    }
}

module.exports = nextConfig;

src/app/page.tsx:

'use client';
import { useEffect } from 'react';
import Vips from 'wasm-vips';

export default function Home() {
  useEffect(() => {
    Vips({
      // Disable dynamic modules
      dynamicLibraries: [],
      // Workers needs to import the unbundled version of `vips.js`
      mainScriptUrlOrBlob: './vips.js',
      // wasm-vips is served from the public directory
      locateFile: (fileName, scriptDirectory) => fileName,
    }).then((vips) => {
      console.log('libvips version:', vips.version());
    });
  }, []);

  return (<h1>Hello wasm-vips!</h1>)
}

from wasm-vips.

serafimsanvol avatar serafimsanvol commented on July 30, 2024

@kleisauke, thanks for your help! Now it's working for me

from wasm-vips.

kleisauke avatar kleisauke commented on July 30, 2024

Great! I'll close, please feel free to re-open if questions remain.

from wasm-vips.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.