-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Cannot find module '../build/Release/sharp-{platformAndArch}.node on typescript project #3126
Comments
Hi, did you see https://sharp.pixelplumbing.com/install#aws-lambda ? |
Hello, yes I checked it out. However I am not deploying with a zip file with node_modules. It is being deployed via a code pipeline. I think if I am able to solve for my local dev, it should be able to solve for the lambda. |
Are you populating |
Yes, all that is taken care of when the serverless lambdas are deployed. Looking more critically at the problem at my local with fewer variables, I think its relates to typescript and esbuild that is bundling the project files. I saw some mention of externals in other related issues but this is now beyond my understanding, but I suspect the challenge lies around there. |
I've just added a section to the docs (not published yet) about use with esbuild - see https://github.com/lovell/sharp/blob/main/docs/install.md#esbuild |
Thank you, this pins down the challenge I was having. Thank you for your amazing library! |
I hope this information helped. Please feel free to re-open with more details if further assistance is required. |
For AWS lambda deployment with Sharp module from
Note: If you are using AWS code build for automatic deployment no other additional script was needed for my end. Also, you need to comment out the script |
@SayefReyadh thank you very much this makes sense. Thank you for the added explanation of what is going on. Out of interest, how did you get to that solution? |
@chris-kck similar implementations were done for serverless-webpack and discussed in #2230 |
I am having issues making sharp work on aws lambda (with cdk) and esbuild. I am creating one .js file via esbuild and then deploy my lambda function via cdk with that one .js file (instead of using a zip folder). When I run my lambda function I get this error:
I have read the installation guidelines on lambda and esbuild but I don't think that makes sense here. I need to have the sharp package present in the lambda context if I should exclude it in esbuild (which I am doing with the aws-sdk package). But how do I then get it to be present in my lambda? Any hints for me on this one? |
@SayefReyadh Thanks for the hint. As far as I can see the mentioned PR is not relevant here. The cdk setup with esbuild seems to be different from serverless. I managed to get it to work which also made me realized what is missing. Since we have to mark Not a great solution, I think. Ideally I would like to just use esbuild without marking sharp as external but I guess that is not possible due to the compiled source files. Another option would be to offer a lambda layer with |
@SayefReyadh I found a good solution that should be added to the sharp docs, I think. You can set this up quite easily by using the
Just as a reminder, this is for Here is a code snippet:
|
@flosky Thanks, appreciated the update. |
Possible install-time or require-time problem
npm install
is the same as the architecture and platform of Node.js used at runtime.Are you using the latest version of sharp?
sharp
as reported bynpm view sharp dist-tags.latest
.If you cannot confirm this, please upgrade to the latest version and try again before opening an issue.
If you are using another package which depends on a version of
sharp
that is not the latest, please open an issue against that package instead.Is this a problem with filesystem permissions? NO
If you are using npm v6 or earlier and installing as a
root
orsudo
user, have you tried with thenpm install --unsafe-perm
flag?If you are using npm v7 or later, does the user running
npm install
own the directory it is run in?If you are using the
ignore-scripts
feature ofnpm
, have you tried with thenpm install --ignore-scripts=false
flag?What is the complete output of running
npm install --verbose sharp
?Too Long, but no visible error during this step.
What is the output of running
npx envinfo --binaries --system --npmPackages=sharp --npmGlobalPackages=sharp
?System:
OS: macOS 12.2
CPU: (8) x64 Apple M1
Memory: 35.98 MB / 8.00 GB
Shell: 5.8 - /bin/zsh
Binaries:
Node: 14.19.0 - ~/.nvm/versions/node/v14.19.0/bin/node
Yarn: 1.22.17 - ~/.nvm/versions/node/v14.19.0/bin/yarn
npm: 6.14.16 - ~/.nvm/versions/node/v14.19.0/bin/npm
npmPackages:
sharp: ^0.30.2 => 0.30.2
Suspicions and additional context
I do understand the platform and arch are different but sharp is clever enough to detect the platform and install the appropriate pre-built binaries. In addition, the installation process is restarted on the lambda.
Lastly, this error is only occuring at runtime. Project is setup to use typescript. I have tried using different kinds of imports like require('sharp'), import {sharp} from 'sharp', import * as sharp from 'sharp' and import sharp from 'sharp' as in other issues but with no luck.
Error on lambda function
@lovell does this library currently support typescript? I dove deep into the documentation but could not find how to use it with typescript. This image shows the error I was encountering both on my local on Mac and on AWS lambda. Please assist.
Error on M1 showing the file actually exists
The text was updated successfully, but these errors were encountered: