1

finden Ich möchte ein Paket erstellen, auf AWS zu implementieren mit serverless und webpack.aws + serverless + webpack => nicht Modul xxx in prod

In serverless.yml möchte ich alle Ressourcen erklären (vor allem DynamoDB Tabellen) und die Funktionen. Ich möchte externe node.js Bibliotheken verwenden.

Die Ordnerstruktur ist:

|- serverless.yml 
|- webpack.config.js 
|- package.json 
|- src 
    \ - file1.js 
    | - file2.js 

Auszug aus serverless.yml

functions: 
    function1: 
    handler: src/file1.f1 
    function2: 
    handler: src/file2.f2 

Auszug aus webpack.congfig.js

module.exports = { 
    entry: { 
    file1: './src/file1.js', 
    file2: './src/file2.js', 
    }, 
    target: 'node', 
    output: { 
    libraryTarget: 'commonjs', 
    path: path.join(__dirname, '.webpack'), 
    filename: '[name].js', 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.json$/, 
     loaders: ['json-loader'], 
     }, 
    ], 
    }, 
}; 

Wenn dabei ein serverless deploy alles in Ordnung ist, aber wenn die Lambda-Prüfung bekomme ich einen Fehler:

{ 
    "errorMessage": "Cannot find module '/var/task/src/file1'", 
    "errorType": "Error", 
    "stackTrace": [ 
    "Function.Module._load (module.js:276:25)", 
    "Module.require (module.js:353:17)", 
    "require (internal/module.js:12:17)" 
    ] 
} 

Können Sie mir sagen, was mache ich falsch?

Da ich ein Neuling mit Serverless bin, können Sie mir einige "bessere Praxis" für die Code-und Entwicklungsorganisation vorschlagen? (Serverless und Nodejs sind auferlegt, Webpack und alles andere ist nicht)

Antwort

2

Ich würde die Verwendung der serverless-webpack plugin empfehlen. Es ist schwer zu sagen, ohne die gesamte Datei serverless.yml zu sehen, aber ich würde davon ausgehen, dass Serverless versucht, die Funktionen unter functions:, die in Ihrem Fall in einer Syntax nicht von der Node.js 4.3 Laufzeit auf AWS Lambda verstanden geschrieben sind zu implementieren.

Ein guter Spaziergang durch, wie man ein Projekt mit dem serverless-webpack Plugin einzurichten wurde von Serverless Stack detailliert beschrieben worden:

  1. Setup the Serverless Framework
  2. Add Support for ES6 JavaScript
+0

Durch das Lesen der Links werden die Dinge klarer. Ich habe meine Blockierungssituation gelöst, indem ich den 'src /' des Handlers in 'serverless.yml' Datei entfernt habe. – Costin

0

Eine mögliche Lösung für den Fehler ist die src/ aus dem Handler der Funktion in serverless.yml Datei entfernen.

Dieser Ansatz hat den Nebeneffekt, dass beim automatischen Erstellen von Tests mit serverless-mocha-plugin der src/ nicht mehr berücksichtigt wird und manuell in const mod = require('../src/user.js'); hinzugefügt werden muss.

Es kann andere Nebenwirkungen geben, Abwesenheit von Beweisen ist kein Beweis für Abwesenheit! :)

Also, Ich bin immer noch auf der Suche nach einer Lösung ohne Nebenwirkungen.

Verwandte Themen