【发布时间】:2021-10-25 04:35:13
【问题描述】:
我是 nodeJS、npm 和 aws lambda 的新手。假设我有一个想要在几个 lambda 函数中使用的自定义排序算法。这应该是非常简单的事情,但我发现的唯一方法是创建一个层,其中包含一个发布为 npm 包的节点模块。我不希望将任何代码上传到 npm。
我尝试下载我当前使用的层,在 node_modules 中创建一个文件夹以及在 npm 中发布的其他包
- npm 初始化
- 填写 package.json 的所有信息
- 在 index.js 中创建了一个函数代码
'use strict'
exports.myfunc= myfunc;
function myfunc() {
console.log("This is a message from the demo package");
}
-
再次压缩所有图层并将其上传到图层的第 2 版中
-
在 lambda 函数中选择新版本并调用它,就像我对来自第三方的任何其他 node_module 所做的那样,如下所示:
const mypack= require('mypack'); mypack.myfunc();
但它告诉我:
"errorMessage": "错误:找不到模块...\n需要堆栈:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/ index.js",
我认为这可能是因为在 nodejs 文件夹的层中,有 package-lock.json 而我的模块不在那里。我试图把它放在那里,没有在 npm 上发布的包具有但不起作用的“已解决”和“完整性”。
有没有办法在与 npm 无关的 nodejs 层中简单地上传我想要的代码?
我想在接受的答案中尝试这样的事情, var moduleName = require("path/to/example.js") How to install a node.js module without using npm?
但是我不知道层的模块的路径在哪里,显示__dirname的lambda路径是/var/task,但看起来任何lambda都有相同的路径。我迷路了……
【问题讨论】:
-
如果您使用的是 monorepo 解决方案,您也可以放弃使用层并使用例如 lerna 在本地管理您的包。
标签: node.js amazon-web-services aws-lambda