Node.js:只安装googleapi所需的模块



我使用NodeJs发送FCM通知。下面是我的代码

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');
var {
google
} = require('googleapis');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];
const prop = PropertiesReader('properties.properties');
exports.sendSingleNotification = async (event, context) => {
var PROJECT_ID = "xxx";
if (event.body == null && event.body == undefined) {
var response = errorCodes.missing_parameters;
return response;
}

try {
let body = JSON.parse(event.body)
console.log("body", body);
let promise = new Promise(function(resolve, reject) {
var key = require("service-account.json");
var jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return {
"error": "error 1"
};
}
console.log("resolve");
console.log(tokens);
resolve(tokens.access_token);
});
});
let accessToken = await promise;
console.log("access token");
console.log(accessToken);
var message = {
"message": {
"token": body.fcmToken,
"notification": {
"title": "Portugal vs. Denmark",
"body": "great match!"
}
}
};
const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
method: 'post',
body: JSON.stringify(message),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + accessToken
}
});
const data = await response.json();
return {
"message": data
}
} catch (error) {
console.log(error);
return {
"error 2": error
}
}

};

代码工作正常。然而,为了完成这项工作,我已经通过npm install googleapis安装了整个googleapisnpm。这似乎已经下载了许多我不需要的模块,并且它增加了我的应用程序的编译时间。它也可能增加AWS Lambda冷启动时间也(这是一个Lambda应用程序)。

文档说,如果我们需要减少启动时间,我们可以安装特定的模块(https://www.npmjs.com/package/googleapis/v/101.0.0)。

我的问题是,看看我的代码我需要安装的模块,而不是整个googleapis?

我自己想出来的。我必须安装google-auth-librarynpm模块。代码如下:

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');
var googleAuth = require('google-auth-library');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];
const prop = PropertiesReader('properties.properties');
exports.sendChatNotification = async (event, context) => {
var PROJECT_ID = "xxx-xxx";
if (event.body == null && event.body == undefined) {
var response = errorCodes.missing_parameters;
return response;
}
let body = JSON.parse(event.body)
// if (body.recieverUid == null ||
//     body.senderUid == null ||
//     body.message == null
// ) {
//     console.log("fire 1");
//     var response = errorCodes.not_null_parameters;
//     return response;
// }

try {
console.log("body", body);
let promise = new Promise(function(resolve, reject) {
var key = require("service-account.json");
// var jwtClient = new google.auth.JWT(
//     key.client_email,
//     null,
//     key.private_key,
//     SCOPES,
//     null
// );
var jwtClient = new googleAuth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return {
"error": "error 1"
};
}
console.log("resolve");
console.log(tokens);
resolve(tokens.access_token);
});
});
let accessToken = await promise;
console.log("access token");
console.log(accessToken);
var message = {
"message": {
"token": body.fcmToken,
"notification": {
"title": "Portugal vs. Denmark",
"body": "great match!"
}
}
};
const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
method: 'post',
body: JSON.stringify(message),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + accessToken
}
});
const data = await response.json();
return {
"message": data
}
} catch (error) {
console.log(error);
return {
"error 2": error
}
}

};

最新更新