NodeJS 包含排除同一文件夹中无服务器yml中的包

eqoofvh9  于 2023-03-01  发布在  Node.js
关注(0)|答案(2)|浏览(127)

我有一个node_modules文件夹,我想从那里只排除几个模块,但其他模块应该在打包时添加。我该怎么做呢?还有如何使用regex排除一些模块。像在我的node_modules中,我创建了自定义模块,以md-request,md-models等开头。所以我想从打包中只排除这些模块。提前感谢。

mrfwxfqh

mrfwxfqh1#

很有可能你想排除dev依赖项,使用npm i some-dependency --save-dev安装你的dev依赖项,默认情况下,Serverless不会把它们打包到最终的工件中。
如果这还不够,您可以排除所有内容,只包含您需要的内容。
您可以看到Serverless在打包工件时的行为,以及如何排除/包含official docs上的依赖项
下面是一个例子(摘自他们的文档),它excludenode_modules,但保留node_modules/node-fetch(这正是您要找的):

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

这就是您包含您需要的内容的方法:

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

EDIT:在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_*/**

EDIT 2:下面是一个工作示例(请注意我排除了aws-sdk):

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

由于包太大,我无法通过AWS Lambda的控制台看到它,所以我附上了两个屏幕截图-一个带有exclude,一个没有exclude(请查看包大小如何变化)。
排除:

不排除:

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

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

dm7nw8vv

dm7nw8vv2#

我认为serverless最新版本(3.x)不再支持exclude关键字了。我可以使用以下命令来实现:

package:
  patterns:
    - src/**               # include only files from ./src/**/*
    - '!node_modules/**'   # exclude files from ./node_modules/**/*

相关问题