image icon indicating copy to clipboard operation
image copied to clipboard

bug: 1.3.0 could not load the sharp module

Open xxRockOnxx opened this issue 1 year ago • 37 comments

I'm not sure if this is a @nuxt/image, ipx, or sharp issue since updating to 1.3.0, @nuxt/image updates its ipx which also update its sharp.

Reproduction:

1.2.0 (Working): https://codesandbox.io/p/devbox/nuxt-image-1-2-0-build-output-8xnjr9 1.3.0 (Not working): https://codesandbox.io/p/devbox/nuxt-image-1-3-0-could-not-load-the-sharp-module-23zjtt

If needed, open a terminal in codesandbox to build and run it:

npm run build
node .output/server/index.mjs

You'll see that 1.3.0 does not load the image in public directory properly with an error:

{
    "error": {
        "message": "[500] [IPX_ERROR] Could not load the \"sharp\" module using the linux-x64 runtime\nPossible solutions:\n- Ensure optional dependencies can be installed:\n    npm install --include=optional sharp\n    yarn add sharp --ignore-engines\n- Ensure your package manager supports multi-platform installation:\n    See https://sharp.pixelplumbing.com/install#cross-platform\n- Add platform-specific dependencies:\n    npm install --os=linux --cpu=x64 sharp\n- Consult the installation documentation:\n    See https://sharp.pixelplumbing.com/install"
    }
}

xxRockOnxx avatar Jan 18 '24 11:01 xxRockOnxx

I'm facing the same issue …

antoinezanardi avatar Jan 21 '24 13:01 antoinezanardi

Yeap I'm also facing this issue

RomanSkrypnik avatar Jan 21 '24 18:01 RomanSkrypnik

Same here image

lammerfalcon avatar Jan 22 '24 08:01 lammerfalcon

+1

shynline avatar Jan 22 '24 09:01 shynline

For whatever reason it works in this almost exact environment. https://codesandbox.io/p/devbox/in-dependencies-3qdqzf

ZTL-UwU avatar Jan 22 '24 09:01 ZTL-UwU

yeah, same here. After locking the package to 1.2.0 it works again.

bernhardberger avatar Jan 22 '24 11:01 bernhardberger

I've did some digging and found that for pnpm, turning on shamefully-hoist=true in .npmrc will work and shamefully-hoist=false will not. And npm works no matter what.

See:

  • true: https://codesandbox.io/p/devbox/shamefully-hoist-true-26fgzm
  • false: https://codesandbox.io/p/devbox/shamefully-hoist-false-qgjhsk

The reason can be as follows. In sharp it imported the runtime like such:

in https://github.com/lovell/sharp/blob/main/lib/sharp.js

const paths = [
  `../src/build/Release/sharp-${runtimePlatform}.node`,
  '../src/build/Release/sharp-wasm32.node',
  `@img/sharp-${runtimePlatform}/sharp.node`,
  '@img/sharp-wasm32/sharp.node'
];

let sharp;
const errors = [];
for (const path of paths) {
  try {
    sharp = require(path);
    break;
  } catch (err) {
    /* istanbul ignore next */
    errors.push(err);
  }
}

When shamefully-hoist=false, @img/sharp-xxx does not exist in node_modules/ any more. Instead it's in node_modules/.pnpm/@img+sharp-xxx.

Which afterwards it returns the topic error.

if (sharp) {
  module.exports = sharp;
} else {
  const [isLinux, isMacOs, isWindows] = ['linux', 'darwin', 'win32'].map(os => runtimePlatform.startsWith(os));

  const help = [`Could not load the "sharp" module using the ${runtimePlatform} runtime`];
  errors.forEach(err => {
    if (err.code !== 'MODULE_NOT_FOUND') {
      help.push(`${err.code}: ${err.message}`);
    }
  });

...

ZTL-UwU avatar Jan 22 '24 14:01 ZTL-UwU

For me v1.2 doesn't work either. As far as i can tell it breaks related to ipx v3

yarn.lock

"@nuxt/image@^1.2.0":
  version "1.3.0"
  resolved "https://registry.yarnpkg.com/@nuxt/image/-/image-1.3.0.tgz#2ad1733a2a8fec873805452a7bf71fee4277e6af"
  integrity sha512-HoAvBImqRrAwCLhZe7IsRwUWvV0ZVqUKFE/GsT8Jo01NBEd+PXhhu2XgHKV+aasqPXdeaQjhL43CSIwuNEwG1w==
  dependencies:
    "@nuxt/kit" "^3.9.2"
    consola "^3.2.3"
    defu "^6.1.4"
    h3 "^1.10.0"
    image-meta "^0.2.0"
    node-fetch-native "^1.6.1"
    ohash "^1.1.3"
    pathe "^1.1.2"
    std-env "^3.7.0"
    ufo "^1.3.2"
  optionalDependencies:
    ipx "^3.0.0"
    
ipx@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/ipx/-/ipx-3.0.0.tgz#9a38aa104bf69a949b1996bcad0d42f58a18d955"
  integrity sha512-hE/WwWsNZ2nlNpRUc8ri7rqLlBgMBp3kTuwbvfseO32e9kNzfvj05sNwdf2/7P/M3XOKAGc1RP8e/iQzYz/thA==
  dependencies:
    "@fastify/accept-negotiator" "^1.1.0"
    citty "^0.1.5"
    consola "^3.2.3"
    defu "^6.1.4"
    destr "^2.0.2"
    etag "^1.8.1"
    h3 "^1.10.0"
    image-meta "^0.2.0"
    listhen "^1.5.6"
    ofetch "^1.3.3"
    pathe "^1.1.2"
    sharp "^0.33.1"
    svgo "^3.2.0"
    ufo "^1.3.2"
    unstorage "^1.10.1"
    xss "^1.0.14"

Artem-Schander avatar Jan 22 '24 17:01 Artem-Schander

Yeah, ipx 3.0 + sharp 0.33 = bad.

Tried pinning sharp to 0.32 - still broken.

Only downgrading back to nuxt/image 1.2.x resolves it (which resolves to ipx 2.x and sharp 0.32)

bernhardberger avatar Jan 22 '24 17:01 bernhardberger

@Artem-Schander your lock file still shows version "1.3.0". I assume that your package.json contains "@nuxt/image": "^1.2.0",. Using ^ as a prefix for the version will install the latest minor version.

You will have to add "@nuxt/image": "1.2.0", to stick to the desired version.

vacijj avatar Jan 22 '24 17:01 vacijj

Even downgrading my Nuxt to 3.9.1 and Nuxt Image to 1.2.0 I'm still getting the same error.

I'm on an M1 Mac, if that makes a difference.

Ben-VP avatar Jan 22 '24 20:01 Ben-VP

@Artem-Schander your lock file still shows version "1.3.0". I assume that your package.json contains "@nuxt/image": "^1.2.0",. Using ^ as a prefix for the version will install the latest minor version.

You will have to add "@nuxt/image": "1.2.0", to stick to the desired version.

you're right. should have noticed myself. sorry for the noise.

Artem-Schander avatar Jan 22 '24 20:01 Artem-Schander

Hmm.. I'm facing the same issue … CleanShot 2024-01-23 at 18 15 34@2x

Edit: After reading the previous comments, finally this can be temporarily fixed by downgrading to 1.2.0

riobahtiar avatar Jan 23 '24 11:01 riobahtiar

Same issue

agracia-foticos avatar Jan 24 '24 10:01 agracia-foticos

@nuxt/image 1.3.0 also includes an update to ipx 3.0.0

I reverted that update with a yarn resolution and it works again:

{
 // ...
  "packageManager": "[email protected]",
  "resolutions": {
    "@nuxt/image/ipx": "^2.0.2",
  }
}

Here is the commit that did the update for 1.3.0: https://github.com/nuxt/image/commit/0a5974b22b05f0d6c187eb9344fb78a772d6efbd

oemer-aran avatar Jan 24 '24 14:01 oemer-aran

Hmm.. I'm facing the same issue … CleanShot 2024-01-23 at 18 15 34@2x

Edit: After reading the previous comments, finally this can be temporarily fixed by downgrading to 1.2.0

Unfortunately, it didn't help me... in fact, it's a pity that the minor version completely disables the library..

zavvla avatar Jan 24 '24 15:01 zavvla

I'm having same issue image

I'm using Nuxt 2 I'm tried put in package json "@nuxt/image": "0.7.1" and "sharp": "0.32.6"

Any solution?

julioglobal100 avatar Jan 24 '24 20:01 julioglobal100

@Artem-Schander your lock file still shows version "1.3.0". I assume that your package.json contains "@nuxt/image": "^1.2.0",. Using ^ as a prefix for the version will install the latest minor version.

You will have to add "@nuxt/image": "1.2.0", to stick to the desired version.

Hi @zavvla, please follow this comment. so just use "1.2.0", dont use prefix ^

riobahtiar avatar Jan 25 '24 17:01 riobahtiar

Hey everyone! We are aware of the recent issues. The problem is how sharp bundles binaries for various platforms, especially causing issues when the prod environment is different than the dev/build environment.

TheAlexLichter avatar Jan 30 '24 21:01 TheAlexLichter

We are using yarn v1 and falling back to [email protected] works as a temporary fix in our projects:

"resolutions": {
  "sharp": "0.32.6"
}

This mechanism also exists for npm via overrides (untested):

"overrides": {
  "sharp": "0.32.6"
}

riddla avatar Feb 01 '24 07:02 riddla

I'm facing the same issue … "nuxt": "3.9.3" "@nuxt/image": "1.3.0"

liudexiang3218 avatar Feb 01 '24 08:02 liudexiang3218

I'm facing the same issue on a Apple M1

In my case the issue was only when I run the app on the server, if I do

`npm run build

node .output/server/index.mjs`

everything works fine, the problem begins when I upload the build on a Centos9 and run it with PM2, there I get the:

{ "error": { "message": "[500] [IPX_ERROR] Could not load the \"sharp\" module using the linux-x64 runtime\nPossible solutions:\n- Ensure optional dependencies can be installed:\n npm install --include=optional sharp\n yarn add sharp --ignore-engines\n- Ensure your package manager supports multi-platform installation:\n See https://sharp.pixelplumbing.com/install#cross-platform\n- Add platform-specific dependencies:\n npm install --os=linux --cpu=x64 sharp\n- Consult the installation documentation:\n See https://sharp.pixelplumbing.com/install" } }

The only thing that changed something a bit was to put "@nuxt/image": "1.2.0" on my package.json dependencies.

On my local machine everything still run smoothly, but if I upload the build on the server the error now is:

{"error":{"message":"[500] [IPX_ERROR] \nSomething went wrong installing the \"sharp\" module\n\nCannot find module '../build/Release/sharp-linux-x64.node'\nRequire stack:\n- /usr/share/nginx/html/default/public/frontend/server/node_modules/sharp/lib/sharp.js\n- /usr/share/nginx/html/default/public/frontend/server/node_modules/sharp/lib/constructor.js\n- /usr/share/nginx/html/default/public/frontend/server/node_modules/sharp/lib/index.js\n\nPossible solutions:\n- Install with verbose logging and look for errors: \"npm install --ignore-scripts=false --foreground-scripts --verbose sharp\"\n- Install for the current linux-x64 runtime: \"npm install --platform=linux --arch=x64 sharp\"\n- Consult the installation documentation: https://sharp.pixelplumbing.com/install"}}

ThePlastic avatar Feb 01 '24 16:02 ThePlastic

+1

gorkie avatar Feb 02 '24 08:02 gorkie

@gorkie and others

Please refrain from posting comments that don't add additional context like "+1", "me too" or "bump". Instead, just upvote the issue through reactions or provide additional context like a reproduction, a new scenario where it happens or anything else that helps resolving the issue.

TheAlexLichter avatar Feb 02 '24 09:02 TheAlexLichter

I'm stuck with this, I'm developing from an Apple M1 so an ARM, to a linux/amd64 environment, if I downgrade to 1.2 I still get the Cannot find module '../build/Release/sharp-linux-x64.node error. My only workaround is not using @nuxt/image at all.

Until a fix arrives, does anyone know a valid workaround for my usecase?

ThePlastic avatar Feb 04 '24 14:02 ThePlastic

I'm stuck with this, I'm developing from an Apple M1 so an ARM, to a linux/amd64 environment, if I downgrade to 1.2 I still get the Cannot find module '../build/Release/sharp-linux-x64.node error. My only workaround is not using @nuxt/image at all.

Until a fix arrives, does anyone know a valid workaround for my usecase?

@ThePlastic I had to restart my M1 Mac after downgrading to get this to work again.

Ben-VP avatar Feb 04 '24 23:02 Ben-VP

@ThePlastic I had to restart my M1 Mac after downgrading to get this to work again.

Tried, no result.

ThePlastic avatar Feb 05 '24 08:02 ThePlastic

Same problem with Nuxt 3.10 and Nuxt/Image 1.3. But the problem only appears locally, my project is deployed on Vercel and everything works. By switching back to version 1.2, the problem disappears... I'm on WIn11 22H2 build 22621.3007, if this helps.

OTTIN-T avatar Feb 09 '24 06:02 OTTIN-T

Same problem with Nuxt 3.10 and Nuxt/Image 1.3. But the problem only appears locally, my project is deployed on Vercel and everything works. By switching back to version 1.2, the problem disappears... I'm on WIn11 22H2 build 22621.3007, if this helps.

I believed the same but was just a matter of npm cache on the production environment, once I made a clean deploy the problem arise in production too

ThePlastic avatar Feb 09 '24 08:02 ThePlastic

I also reproduced this in a docker using node-alpine:20, running on Ubuntu 20. Downgrading to 1.2.0 did not solve the issue.

EDIT: In my case, I was able to fix it, by re-installing sharp (rebuild would do as well), since I was developing on Windows and Docker uses Linux.

RUN rm -rf server/node_modules/sharp && npm --prefix server install sharp

rherwig avatar Feb 09 '24 19:02 rherwig