Supongamos que descargamos el siguiente script de S3 :
const sum_two = (a, b) => { return a + b; }Descargando usando esto:
async function downloadFileS3(filenameDownload) { const AWS = require('aws-sdk'); const fs = require('fs'); AWS.config.update( { accessKeyId: "XXXXXXXXXXXXXXXXXXXXXXXX", secretAccessKey: "YYYYYYYYYYYYYYYYYYYYY", correctClockSkew: true, } ); const params = { Bucket: 'ZZZZZZZZZZZZZZZZZZZZZZZZ', Key: filenameDownload, } const s3 = new AWS.S3(); try { const data = await s3.getObject(params).promise(); if (data) { // do something with data.Body const downloaded = data.Body.toString('utf-8'); // grab sum_two from "downloaded" and use below ....... ....... ....... } } catch (error) { console.log(error); } } ¿Cómo podemos extraer sum_two (y usarlo después) de la downloaded SIN crear un archivo local?
¡Lo que significa que no quiero usar el código a continuación!
// fs.writeFile(`${filenameDownload}`, downloaded, function (err) { // if (err) { // console.log('Failed to create file', err); // } // console.log(sum_two(.... , ....)); // });Puede usar el módulo vm nativo de node.js para esto.
Crear un Script a partir del código descargado
Ejecutarlo en el contexto actual
Después de eso, la función descargada estará disponible para su uso:
const vm = require('vm'); // ... const downloaded = data.Body.toString('utf-8'); const script = new vm.Script(downloaded); script.runInThisContext() console.log(sum_two(1,2))