Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将本地导入根与AWS Lamba一起使用_Node.js_Amazon Web Services_Aws Lambda_Node Modules_Es6 Modules - Fatal编程技术网

Node.js 将本地导入根与AWS Lamba一起使用

Node.js 将本地导入根与AWS Lamba一起使用,node.js,amazon-web-services,aws-lambda,node-modules,es6-modules,Node.js,Amazon Web Services,Aws Lambda,Node Modules,Es6 Modules,我正在用TypeScript构建一些AWS Lambda函数,TS源代码在src/中,传输JS在build/中 我的问题是,我想摆脱到处都是恼人的相对导入路径,例如import Foo from'../../../../../utils/Foo/bar'。在诸如Express之类的其他应用程序中,我通常设置一个节点\u PATH=build或类似设置,以便可以从“utils/Foo/bar”导入Foo。我还可以将ts节点与node\u PATH=src-ts节点一起在本地使用 但是,我发现使用A

我正在用TypeScript构建一些AWS Lambda函数,TS源代码在
src/
中,传输JS在
build/

我的问题是,我想摆脱到处都是恼人的相对导入路径,例如
import Foo from'../../../../../utils/Foo/bar'
。在诸如Express之类的其他应用程序中,我通常设置一个
节点\u PATH=build
或类似设置,以便可以从“utils/Foo/bar”导入Foo。我还可以将
ts节点
node\u PATH=src-ts节点
一起在本地使用

但是,我发现使用AWS Lambda添加自定义本地模块根路径非常繁琐:

  • NODE_PATH
    设置为运行时(包括
    aws sdk
    )所在的
    NODE_modules
    文件夹,以及任何层,例如
    /opt/nodejs/node12/NODE_modules/:/opt/nodejs NODE_modules:$LAMBDA_runtime_DIR/NODE_modules
    。如果我使用
    NODE\u PATH=build
    NODE\u PATH=/var/task/build
    部署函数,我可以导入本地模块,但不能导入
    NODE\u模块
    库。自定义
    节点路径
    与AWS Lambda的默认系统
    节点路径
    似乎没有自动合并
  • 我尝试更改
    LAMBDA\u RUNTIME\u DIR
    ,将我的
    build
    目录附加到它,但这是一个保留的只读环境变量
  • process.env
    可以在运行时进行变异,例如通过第一行代码进行变异,但现在影响模块加载器已经太晚了
到目前为止,我只能手动将
节点路径设置为
/opt/nodejs/node12/NODE\u modules/:/opt/nodejs/NODE\u modules:/var/task/NODE\u modules:/var/task/build
。我不喜欢这种依赖关系,它还依赖于运行时、Node.JS版本等


是否有一个合适的解决方案可以在不破坏默认路径或依赖硬编码路径的情况下附加本地自定义模块根路径?

您可以使用像
webpack
这样的捆绑程序。我就是这么做的。