fs.readFileSync 使用 lambda 部署时找不到文件
fs.readFileSync cannot find file when deploying with lambda
在我的代码中,我从我的 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
中实际处理这个问题
fs.readFileSync cannot find file when deploying with lambda
检查当前目录并检查部署环境中的目标目录内容。将用于该检查的适当代码添加到您的 program/script.
您可以使用 require()
.
加载 JSON 个文件
const featured_json_data = require('./featured.json')
或者更好的是,将您的 JSON 转换为 JS!
我建议查看 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/*'
])
]
};
对于非 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);
}
};
在我的代码中,我从我的 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
中实际处理这个问题fs.readFileSync cannot find file when deploying with lambda
检查当前目录并检查部署环境中的目标目录内容。将用于该检查的适当代码添加到您的 program/script.
您可以使用 require()
.
const featured_json_data = require('./featured.json')
或者更好的是,将您的 JSON 转换为 JS!
我建议查看 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/*'
])
]
};
对于非 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);
}
};