在同一文件夹中的无服务器yml中包括排除软件包

时间:2019-03-04 09:31:17

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

我从那里有一个node_modules文件夹,我只想排除几个模块,但包装时应添加其他模块。我该怎么做。还如何使用正则表达式排除某些模块。就像在我的node_modules中一样,我已经创建了以md-request,md-models等开头的自定义模块。因此,我只想从打包中排除这些模块。 提前致谢。

1 个答案:

答案 0 :(得分:2)

您最有可能试图排除开发人员依赖性。使用npm i some-dependency --save-dev安装您的开发依赖项,默认情况下,Serverless不会将它们打包到最终工件中。

如果这还不够,您可以排除所有内容,仅包括您需要的内容。

您可以看到打包工件时Serverless的行为,以及如何排除/包含对official docs的依赖关系

下面是一个示例(从他们的文档中摘录):排除 node_modules,但保留node_modules / node-fetch(这正是您要查找的内容):

package:
  exclude:
    - node_modules/**
    - '!node_modules/node-fetch/**'

这是您可以仅包含所需内容的方法:

package:
  exclude:
    - src/**
  include:
    - src/function/handler.js

编辑:在OP进行评论后,以下是处理所需行为的方法:

package:
  exclude:
    - node_modules/my_module_1/**
    - node_modules/my_module_2/**
    - node_modules/my_module_3/**
    - node_modules/my_module_4/**

如果模块名称如上所述彼此非常接近,则可以使用通配符*将它们排成一排:

package:
  exclude: 
    - node_modules/my_module_*/**

编辑2 :这是一个有效的示例(请参见我排除了aws-sdk):

package:
 exclude:
  - node_modules/aws-sdk/**

由于软件包太大,并且我无法通过AWS Lambda的控制台看到它,所以我要附加两个屏幕截图-一个带有排除的屏幕截图,另一个不带有排除的屏幕截图(请参阅包大小如何更改)。

排除:

enter image description here

不排除:

enter image description here

这样,您甚至不需要添加'!node_modules / whatever-i-want-to-keep'参数

编辑3 :在具有手动创建的node_modules和各自的my_module_ *目录的示例项目中使用*通配符

enter image description here

enter image description here