在 AWS Lambda 上使用 TypeScript 时,如果出现运行时.ImportModuleError 的错误提示,可能是因为模块没有被正确地打包导入。根据情况,可以选择打包或不打包。
如果不打包,可以在 tsconfig.json 文件中的 compilerOptions 部分添加以下代码:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true
}
}
这将使 TypeScript 输出的代码符合 CommonJS 规范,使 AWS Lambda 能够正确加载模块。
如果需要打包,可以使用 webpack 或其他打包工具。在 webpack.config.js 文件中可以添加以下配置:
const nodeExternals = require('webpack-node-externals');
module.exports = {
// ...
target: 'node',
entry: './src/index.ts',
externals: [nodeExternals()],
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: ['.ts', '.js'],
},
// ...
};
其中,nodeExternals 函数将所有 Node.js 内置模块从打包中排除掉,因为这些模块是不能被打包的。同时,也需要将 ts-loader 安装到 devDependencies 中,并在 package.json 文件中添加以下代码:
{
"scripts": {
"build": "webpack --mode=production"
}
}
这将使 webpack 打包 TypeScript 代码,并输出到 dist 目录中。之后,在 AWS Lambda 中将文件指向 dist/index.js 即可。