Я хотел бы, чтобы webpack выводил пакет, содержащий встроенный пакет googleapis
(или, по крайней мере, свернутый в выходном каталоге).
Моя цель - предоставить моему коду доступ к API разработчика Google Play (через пакет googleapis
), развернутому на стороне сервера в AWS Lambda (NodeJS 10.x runtime). В настоящее время это может выполняться локально.
Вот мои Javascript:
import { google } from 'googleapis';
exports.handler = async (event) => {
// Service Account authentication
let auth = new google.auth.GoogleAuth({
credentials: {
client_email: "abcde@api-123456.iam.gserviceaccount.com",
private_key: "PRIVATE_KEY_HERE"
},
scopes: ['https://www.googleapis.com/auth/androidpublisher']
});
const authClient = await auth.getClient();
// Google Play Developer API
const androidPublisher = new androidpublisher_v3.Androidpublisher({
auth: authClient,
});
console.log("Google Play Developer API created");
console.log(androidPublisher);
return {
statusCode: 200,
body: JSON.stringify({ 'message': 'hello' })
}
}
Вот мои webpack.config.js
:
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: [
'./example.js',
],
target: 'node',
externals: [nodeExternals()],
devtool: 'inline-source-map',
output: {
filename: 'handler.js',
},
plugins: []
}
Наконец, вот мои package.json
:
{
"name": "test_gapi",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"googleapis": "^47.0.0",
"webpack-node-externals": "^1.7.2"
},
"devDependencies": {
"webpack": "^4.42.0"
}
}
Я попытался запустить webpack mode --development
и вижу, что вывод handler.js
не содержит код пакета googleapis
, а вместо этого содержит require(googleapis)
.
Если Я развернул zip-каталог dist
как есть на AWS Lambda (около 11 килобайт), он не может найти модуль. Но если я добавлю каталог node_modules
в zip, AWS Lambda прекрасно выполняет код, но артефакт zip составляет около 10 мегабайт.
Поэтому мне интересно, почему webpack не связывает зависимости в выходной файл javascript, и если это можно сделать, можно ли его минимизировать в рабочей среде.