Posts

Showing posts from 2021

Shrinking node_modules for AWS Lambda (My First “npm shock” and a Practical Fix)

Image
I’m a newbie in Node.js and not really familiar with the whole npm ecosystem. I honestly didn’t expect that a single npm install would explode into ~10MB spread across ~30 different folders. After a few minutes of staring at it, I realized what’s actually inside those folders: not just runtime code. What shocked me Inside node_modules you get everything: README files source files tests examples docs And then the next level of madness: modules inside modules . Duplicated dependencies nested multiple levels deep (e.g. inherits , core-util-is , tedious …), even if they already exist elsewhere in the project tree. Here’s a typical example: I’m in node_modules → package bl , and there’s another node_modules folder inside it, plus test , README and other “junk”… all for a ~10KB JS file. The obvious assumption (that turned out wrong) Once I accepted the chaos, I assumed there must be a “build for production” command that would “compile” depende...

Node.js / npm: Fixing “npm ERR! cb.apply is not a function” on Windows

Image
Lately I ran into this issue and I want to share the exact way I got out of it: C:\>npm i npm -g npm WARN npm npm does not support Node.js v14.17.0 npm WARN  npm  You should probably upgrade to a newer version of node as we npm WARN  npm  can't make any promises that npm will work with this version. npm WARN  npm  Supported releases of Node.js are the latest release of 6, 8, 9, 10, 11. npm WARN  npm  You can find the latest version at https://nodejs.org/ npm ERR! cb.apply is not a function npm ERR! A complete log of this run can be found in: npm ERR!       %USERPROFILE% \AppData\Roaming\npm-cache\_logs\2021-05-30T14_58_58_367Z-debug.log It happened right after I installed a newer version of Node.js. But when I c...

AWS API Gateway + Lambda: How to Add a “Get By ID” Resource (Path Parameter)

Image
This thing is not trivial and I couldn’t find a simple explanation. Here is the exact sequence to add a Get By ID -style path parameter like /users/{userid} in API Gateway and wire it to Lambda. Goal Turn an existing resource like /users into: /users /users/{userid} (new resource) Step-by-step Select an existing resource (e.g. users ). Click Actions and select Create Resource . In Resource Name , put the parameter name in curly braces (e.g. {userid} ). In Resource Path , you should see read-only text like /users/ and a textbox for the parameter. Enter {userid} in the textbox and click Create Resource . You should now see a new branch in your API tree: /{userid} . Select it. Click Actions → Create Method and add ANY (or the specific method you need). ...