Lambda ENOENT:没有这样的文件或目录
Lambda ENOENT: no such file or directory
我正在尝试读取 AWS Lambda 函数 (Node 6.10.0) 中的文件 .yml。
console.log(__dirname + '/gameOptions.yml');
console.log(path.resolve('./gameOptions.yml'));
console.log(path.resolve('/gameOptions.yml'));
console.log('./gameOptions.yml');
console.log(process.cwd() + '/api/lib/gameOptions.yml');
let doc = yaml.safeLoad(fs.readFileSync(path.resolve('./gameOptions.yml'), 'utf8'));
我已经尝试了所有可能的方法,但总是得到 ENOENT: no such file or directory
。
该文件在同一个文件夹中,它是一个 .yml
,所以 require('')
也不起作用。
以上代码的结果为:
/Users\marcus\Documents\Workspace\proak-api\proak-api\api\lib/gameOptions.yml
/var/task/gameOptions.yml
/gameOptions.yml
./gameOptions.yml
/var/task/api/lib/gameOptions.yml
并且它在本地工作。
要解决这个问题,您需要注意两件事:
优化
如果您正在使用某些东西来缩小代码,例如serverless-plugin-optimize:
包含不缩小的文件。
myLambda:
handler: mySubFolder/myLambda.handler
optimize:
includePaths: ['mySubFolder/myFile.json']
解析路径。
path.resolve(process.env.LAMBDA_TASK_ROOT, '_optimize', process.env.AWS_LAMBDA_FUNCTION_NAME, 'mySubFolder/myFile.json')
如果不使用minify,还需要将.yml文件require到Lambda中,才能编译成函数。
Require require('file.yml') 给你一个错误。所以你让到:
var fs = require('fs')
, yaml = require('js-yaml');
require.extensions['.yaml'] =
require.extensions['.yml'] = function(module, filename) {
var content = fs.readFileSync(filename, 'utf8');
// Parse the file content and give to module.exports
content = yaml.load(content);
module.exports = content;
};
我正在尝试读取 AWS Lambda 函数 (Node 6.10.0) 中的文件 .yml。
console.log(__dirname + '/gameOptions.yml');
console.log(path.resolve('./gameOptions.yml'));
console.log(path.resolve('/gameOptions.yml'));
console.log('./gameOptions.yml');
console.log(process.cwd() + '/api/lib/gameOptions.yml');
let doc = yaml.safeLoad(fs.readFileSync(path.resolve('./gameOptions.yml'), 'utf8'));
我已经尝试了所有可能的方法,但总是得到 ENOENT: no such file or directory
。
该文件在同一个文件夹中,它是一个 .yml
,所以 require('')
也不起作用。
以上代码的结果为:
/Users\marcus\Documents\Workspace\proak-api\proak-api\api\lib/gameOptions.yml
/var/task/gameOptions.yml
/gameOptions.yml
./gameOptions.yml
/var/task/api/lib/gameOptions.yml
并且它在本地工作。
要解决这个问题,您需要注意两件事:
优化 如果您正在使用某些东西来缩小代码,例如serverless-plugin-optimize:
包含不缩小的文件。
myLambda:
handler: mySubFolder/myLambda.handler
optimize:
includePaths: ['mySubFolder/myFile.json']
解析路径。
path.resolve(process.env.LAMBDA_TASK_ROOT, '_optimize', process.env.AWS_LAMBDA_FUNCTION_NAME, 'mySubFolder/myFile.json')
如果不使用minify,还需要将.yml文件require到Lambda中,才能编译成函数。
Require require('file.yml') 给你一个错误。所以你让到:
var fs = require('fs')
, yaml = require('js-yaml');
require.extensions['.yaml'] =
require.extensions['.yml'] = function(module, filename) {
var content = fs.readFileSync(filename, 'utf8');
// Parse the file content and give to module.exports
content = yaml.load(content);
module.exports = content;
};