Обновление до Webpack 4 + Jest 23 + Babel 7 и возникли некоторые проблемы.
Ошибка только при развертывании в AWS Lambda.
{
"errorMessage": "Handler 'handler' missing on module 'index'"
}
JestТесты проходят локально.Предположим, что Jest строит код не так, как npm run build
, поэтому.Переключение с import
операторов на require()
исправляет сообщение об ошибке.Так что, вероятно, это проблема конфигурации конфигурации, нужна другая пара глаз.
Если у вас установлен SAM Local, можете воспроизвести это локально с помощью:
git clone https://git@github.com/buildbreakdo/lambda-starter
cd lambda-starter
npm install
npm start
/usr/bin/open -a "/Applications/Google Chrome.app" 'http://127.0.0.1:5000/'
Спасибо за помощь.
Обработчик установлен на:
package.json
{
"name": "aws-api-lambda",
"version": "1.0.0",
"description": "Minimalist AWS API Gateway and AWS Lambda starter kit",
"main": "build/index.js",
"scripts": {
"build": "NODE_ENV=production webpack --display-error-details --display-modules",
"watch": "webpack --watch",
"test": "jest --config ./jest.config.js",
"test:watch": "jest --watch --config ./jest.config.js",
"start": "sam local start-api --port 5000",
"dist": "rm -f dist.zip && zip -jq dist.zip build/index.js",
"update:dev": "aws lambda update-function-code --function-name DevExample --zip-file fileb://dist.zip --publish",
"update:prod": "aws lambda update-function-code --function-name ProdExample --zip-file fileb://dist.zip --publish",
"deploy:dev": "npm run build && npm run test && npm run dist && npm run update:dev",
"deploy:prod": "npm run build && CI=true npm run test && npm run dist && npm run update:prod"
},
"repository": {
"type": "git",
"url": "git+https://github.com/buildbreakdo/aws-api-lambda.git"
},
"keywords": [
"starter",
"starter-kit",
"aws-api-gateway",
"aws-lambda"
],
"author": "Your Name Here",
"bugs": {
"url": "https://github.com/buildbreakdo/aws-api-lambda/issues"
},
"homepage": "https://github.com/buildbreakdo/aws-api-lambda#readme",
"devDependencies": {
"@babel/core": "^7.1.6",
"@babel/preset-env": "^7.1.6",
"babel-core": "^7.0.0-bridge.0",
"babel-loader": "^8.0.4",
"jest": "^23.6.0",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2"
},
"dependencies": {
"cross-fetch": "^2.2.3"
}
}
.babelrc
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "8.10"
}
}
]
]
}
webpack.config.js
const path = require('path');
const webpack = require('webpack');
module.exports = {
optimization: {
minimize: false
},
target: 'node',
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
entry: [
path.join(__dirname, 'src/index.js')
],
output: {
path: path.resolve(__dirname, 'build'),
filename: 'index.js',
libraryTarget: 'commonjs2'
},
plugins: [
new webpack.IgnorePlugin(/^pg-native$/),
new webpack.DefinePlugin({
'process.env.BROWSER': false,
__DEV__: process.env.NODE_ENV !== 'production',
}),
],
module: {
rules: [
{
test: /\.(mjs|js|jsx)$/,
exclude: /node_modules/,
use: ['babel-loader']
}
]
}
};
src / index.js
import fetch from 'cross-fetch';
exports.handler = async (event, context, callback) => {
const request = fetch('https://google.com', {
method: 'HEAD'
});
let data;
try {
const response = await request;
data = {
url: response.url,
status: response.status,
statusText: response.statusText
};
} catch (e) {
console.log(e);
}
return callback(null, {
statusCode: 200,
header: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
}
build / index.js
https://github.com/buildbreakdo/lambda-starter/blob/master/build/index.js
Репозиторий: https://github.com/buildbreakdo/lambda-starter