在我的代码中,我从lambda函数中调用一个查询
let featured_json_data = JSON.parse(fs.readFileSync('data/jsons/featured.json'))
这在本地工作,因为我的featured.json位于我正在阅读的目录中。但是,当我使用无服务器进行部署时,它生成的zip没有这些文件,我得到了
ENOENT: no such file directory, open...
我尝试添加
包装package:
include:
- data/jsons/featured.json
但它不起作用。我得到它的唯一方法是手动添加json文件,然后更改我的编译handler.js代码以从根目录中的json文件中读取。
在这个截图中我必须添加jsons然后再次手动上传它并在编译的handler.js代码中更改目录以排除data / jsons
我想在我的servereless.yml
中实际处理这个问题答案 0 :(得分:1)
您可以使用require()
加载JSON文件。
const featured_json_data = require('./featured.json')
或者更好的是,将您的JSON转换为JS!
答案 1 :(得分:0)
使用lambda 部署时,fs.readFileSync无法找到文件
检查当前目录并检查部署环境中的目标目录内容。将该检查的适当代码添加到您的程序/脚本中。
答案 2 :(得分:0)
我建议您查看copy-webpack-plugin
:https://github.com/webpack-contrib/copy-webpack-plugin
您可以使用它打包其他文件以包含在Lambda部署中。
在我的项目中,我在/ templates目录中有一堆文件。在webpack.config.js中打包这些模板,对我来说,它看起来像:
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyWebpackPlugin([
'./templates/*'
])
]
};
答案 3 :(得分:0)
对于使用非JSON文件,我发现process.cwd()
在大多数情况下对我有用。例如:
const fs = require('fs');
const path = require('path');
export default async (event, context, callback) => {
try {
console.log('cwd path', process.cwd());
const html = fs.readFileSync(
path.resolve(process.cwd(), './html/index.html'),
'utf-8'
);
const response = {
statusCode: 200,
headers: {
'Content-Type': 'text/html'
},
body: html
};
callback(null, response);
} catch (err) {
console.log(err);
}
};