Ada*_*tan 2 dependencies node.js npm aws-lambda serverless-framework
我正在使用无服务器框架编写一些nodejs函数。该package.json文件需要一些依赖项:
{
"name": "adam-test-sls",
"version": "0.1.0",
"description": "Test package to play with sls/lambda",
"main": "handler.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Adam Matan <adam@binaris.com>",
"license": "UNLICENSED",
"dependencies": {
"aws-sdk": ">= 2.0.9",
"json": "^9.0.6",
"underscore": "^1.8.3",
"uuid": "^3.1.0"
},
"devDependencies": {
"eslint": "^4.2.0",
"eslint-config-airbnb": "^15.0.2",
"eslint-config-airbnb-base": "^11.2.0",
"eslint-plugin-import": "^2.7.0"
}
}
Run Code Online (Sandbox Code Playgroud)
node-modules目录的大小几乎为50mb:
# du -smc node_modules
47 node_modules
47 total
Run Code Online (Sandbox Code Playgroud)
压缩时间约为9.5MB,部署时间超过35秒:
# time serverless deploy function --function hello -v
Serverless: Packaging function: hello...
Serverless: Uploading function: hello (9.46 MB)...
Serverless: Successfully deployed function: hello
serverless deploy function --function hello -v 4.28s user 1.15s system 15% cpu 35.165 total
Run Code Online (Sandbox Code Playgroud)
这有点低效-我只更改一个文件,但是每当我做最小的更改时,都必须打包所有未更改的依赖项。
是否知道如何减小zip大小(也许删除devDependencies)或仅上传更改的文件?
aws-sdk在24MB附近,您不需要它,因为Lambda函数已经可以使用它了。一种选择是将其移动到dev-dependencies,然后将您的dev-dependencies放在package.json父目录中。
还有一些工具可以帮助您:
serverless-plugin-include-dependencies插件-以为我不确定如果排除功能被破坏,它的工作情况如何:https : //github.com/dougmoscrop/serverless-plugin-include-dependencies
Webpack也可以与无服务器webpack插件一起使用以控制依赖关系。Webpack消除无效代码可以带来很大的不同。
不理想,但是您也可以npm prune --production在部署之前运行。(之后,您需要npm install再次运行。
我为此使用了图层:图层用于以图层的形式引入附加代码和内容。这将使您的 lambda 函数保持较小的规模,并在运行时从层中提取依赖项。
第 1 步:
创建一个名为的文件夹nodejs
cd Desktop
mkdir nodejs
cd nodejs
npm init
Run Code Online (Sandbox Code Playgroud)
步骤 2: 在此文件夹中安装较大的依赖项。例如:
npm install --save geoip-lite
Run Code Online (Sandbox Code Playgroud)
第三步: 将其压缩,输入您选择的名称。
第4步: 登录AWS控制台,转到lambda服务,然后选择创建层。然后上传您创建的 zip 文件。(正如它所说,如果该 zip 文件大于 10 mb,您可以将其上传到 S3)
在此步骤中,您可以通过进入 lambda 函数并添加您在上述步骤中创建的自定义层来将层分配给 lambda。
如果您有兴趣添加层,请使用 yml 配置
functions:
hello:
handler: handler.hello
layers:
- arn:aws:lambda:region:XXXXXX:layer:LayerName:Y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3569 次 |
| 最近记录: |