【问题标题】:How to include static files on Serverless Framework?如何在无服务器框架中包含静态文件?
【发布时间】:2018-07-11 18:56:27
【问题描述】:

我正在使用无服务器框架创建一个 NodeJS 服务来验证提要,因此我向该服务添加了一个模式文件 (.json),但我无法使其工作。 它似乎不包含在包装中。 Lambda 没有找到该文件。

首先我只是运行 sls 包并检查 zip 内容,但该文件不存在。 我还尝试将文件包含在:

package:
  include:
    - libs/schemas/schema.json

但还是不行。

如何确保静态文件包含在包中并且可以在 lambda 函数中读取?

【问题讨论】:

  • 看来你有correct syntax。您是否仔细检查过您的路径 (libs/schemas/schema.json) 是否正确拼写?你不是在配置文件中声明另一个include 选项吗?
  • ok,找到问题了,和webpack有关。我使用的是无服务器 webpack 插件,并且不包括文件。我更改了插件,现在它尊重我的配置。感谢您的提示。
  • @yabune 你能告诉我你改成哪个插件吗?
  • @yabune 我也有同样的问题。你做了什么改变?

标签: node.js amazon-web-services lambda aws-lambda serverless-framework


【解决方案1】:

这取决于您实际尝试加载文件的方式。

您是用fs.readFile 还是fs.readFileSync 加载它? 在这种情况下,Serverless 不知道您将需要它。如果您为无服务器添加提示以将该文件包含在捆绑包中,请确保您知道它相对于当前工作目录或 __dirname 的位置。

您是否使用require() 加载它? (你知道你可以使用require() 来加载 JSON 文件吗?)在这种情况下,Serverless 应该知道你需要它,但你仍然需要确保路径正确。

如果所有其他方法都失败了,那么您总是可以使用肮脏的 hack。 例如,如果您有一个包含以下内容的文件“x.json”:

{
  "a": 1,
  "b": 2
}

然后您可以将其更改为包含以下内容的x.js 文件:

module.exports = {
  "a": 1,
  "b": 2
};

您可以像加载任何其他 .js 文件一样加载,但这是一个 hack。

【讨论】:

  • 谢谢,我发现它与 webpack 配置有关,不尊重我的无服务器配置,但你的建议很好,它也可以解决问题。
  • @rsp 请详细说明如何编写该“提示”
  • @Jeremy @rsp 建议的“提示”是按照docsserverless.yml 文件中配置serverless-bundle。基本上,你需要在custom下添加一个属性bundle并进行相应的配置。
【解决方案2】:

根据我的发现,您可以通过多种方式做到这一点:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2021-06-29
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多