Amazon web services CasperJS和AWS Lambda
我试图让casperjs使用我的AWS Lambda函数Amazon web services CasperJS和AWS Lambda,amazon-web-services,casperjs,aws-lambda,Amazon Web Services,Casperjs,Aws Lambda,我试图让casperjs使用我的AWS Lambda函数 { "errorMessage": "Cannot find module 'casper'", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:276:25)", "Module.require (module.js:353:17)", "require (internal/module.js:12:17)", "Object.<ano
{
"errorMessage": "Cannot find module 'casper'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:276:25)",
"Module.require (module.js:353:17)",
"require (internal/module.js:12:17)",
"Object.<anonymous> (/var/task/index.js:3:14)",
"Module._compile (module.js:409:26)",
"Object.Module._extensions..js (module.js:416:10)",
"Module.load (module.js:343:32)",
"Function.Module._load (module.js:300:12)",
"Module.require (module.js:353:17)"
]
}
有人知道我做错了什么吗?谢谢 根据Casper.js文档,它实际上不是一个节点模块。因此,您不能在Package.json中要求它并使用节点模块将其压缩。您需要找到如何在lambda实例上安装它,或者找到一个实际的节点模块来实现您想要的功能。我怀疑在lambda上安装casper可能是不可能的,但那只是我的直觉 警告 虽然CasperJS可以通过npm安装,但它不是NodeJS模块,也不会在开箱即用的情况下使用NodeJS。无法通过在节点中使用require('casperjs')加载casper。请注意,CasperJS无法使用绝大多数NodeJS模块。尝试并运用你的最佳判断
根据Casper.js文档,它实际上不是一个节点模块。因此,您不能在Package.json中要求它并使用节点模块将其压缩。您需要找到如何在lambda实例上安装它,或者找到一个实际的节点模块来实现您想要的功能。我怀疑在lambda上安装casper可能是不可能的,但那只是我的直觉 警告 虽然CasperJS可以通过npm安装,但它不是NodeJS模块,也不会在开箱即用的情况下使用NodeJS。无法通过在节点中使用require('casperjs')加载casper。请注意,CasperJS无法使用绝大多数NodeJS模块。尝试并运用你的最佳判断
由于CasperJs依赖于PhantomJs,您可以将其设置为与此repo非常类似的方式: 主要区别在于,您需要添加和定位CasperJs,并且需要确保CasperJs能够找到并加载PhantomJs
"dependencies": {
"casperjs": "latest"
}
var childProcess = require('child_process');
var path = require('path');
exports.handler = function(event, context) {
// Set the path as described here: https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
// Set the path to casperjs
var casperPath = path.join(__dirname, 'node_modules/casperjs/bin/casperjs');
// Arguments for the casper script
var processArgs = [
'test',
path.join(__dirname, 'casper_test_file.js')
];
// Launch the child process
childProcess.execFile(casperPath, processArgs, function(error, stdout, stderr) {
if (error) {
context.fail(error);
return;
}
if (stderr) {
context.fail(error);
return;
}
context.succeed(stdout);
});
}
如果不想使用“test”参数运行CasperJs,只需将其从参数列表中删除即可chmod-ro+rx*
。然后用:zip-r my_package.zip*
将其压缩因为CasperJs依赖于PhantomJs,所以您可以将其设置为与此repo非常相似: 主要区别在于,您需要添加和定位CasperJs,并且需要确保CasperJs能够找到并加载PhantomJs
"dependencies": {
"casperjs": "latest"
}
var childProcess = require('child_process');
var path = require('path');
exports.handler = function(event, context) {
// Set the path as described here: https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
// Set the path to casperjs
var casperPath = path.join(__dirname, 'node_modules/casperjs/bin/casperjs');
// Arguments for the casper script
var processArgs = [
'test',
path.join(__dirname, 'casper_test_file.js')
];
// Launch the child process
childProcess.execFile(casperPath, processArgs, function(error, stdout, stderr) {
if (error) {
context.fail(error);
return;
}
if (stderr) {
context.fail(error);
return;
}
context.succeed(stdout);
});
}
如果不想使用“test”参数运行CasperJs,只需将其从参数列表中删除即可chmod-ro+rx*
。然后用:zip-r my_package.zip*
将其压缩这很好,但我必须将phantomjs固定到1.9.8–更新的版本会在Lambda上失败。这很好,但我必须将phantomjs固定到1.9.8–更新的版本会在Lambda上失败。我们可能使用它。我们可能使用它