Я написал модуль машинописного текста, который использует пакет jwks-rsa npm.
module.ts
const jwksClient = require('jwks-rsa');
const client = jwksClient({
...myoptions
});
export myfunc = () => {
// do something with jwksClient
}
, затем в моем обработчике .ts
import {myfunc} from './handler.ts'
....
myfunc()
....
При тестировании module.ts с помощью jest я не получаю никаких ошибок, и все в порядке.
Проект Typescript был подготовлен с использованием:
serverless create --template aws-nodejs-typescript
Проблема заключается в том, что после того, как я собрал машинопись с помощью веб-пакета, когда яЗапустите маршрут приложения, использующий приведенный выше код handler.ts -> myFunc (). Я получаю следующую ошибку:
{ Error: Cannot find module './JwksClient'
at webpackMissingModule (webpack-internal:///./node_modules/jwks-rsa/lib/index.js:3:83)
at eval (webpack-internal:///./node_modules/jwks-rsa/lib/index.js:3:170)
В /jwks-rsa/lib/index.js:3:170:
var _JwksClient = require('./JwksClient');
Полагаю, мне нужно каким-то образом настроить webpack.config.js ... но пока не иметь никакой подсказки ...
webpack.config.js
const path = require('path');
const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');
module.exports = {
context: __dirname,
mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
entry: slsw.lib.entries,
devtool: slsw.lib.webpack.isLocal ? 'cheap-module-eval-source-map' : 'source-map',
resolve: {
extensions: ['.mjs', '.json', '.ts'],
symlinks: false,
cacheWithContext: false,
},
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: '[name].js',
},
target: 'node',
externals: [nodeExternals()],
module: {
rules: [
// all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
{
test: /\.(tsx?)$/,
loader: 'ts-loader',
exclude: [
[
path.resolve(__dirname, 'node_modules'),
path.resolve(__dirname, '.serverless'),
path.resolve(__dirname, '.webpack'),
],
],
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
},
};
tsconfig.js
{
"compilerOptions": {
"lib": ["es2017"],
"removeComments": true,
"moduleResolution": "node",
"noUnusedLocals": true,
"noUnusedParameters": true,
"sourceMap": true,
"target": "es2017",
"outDir": "lib",
},
"include": ["./**/*.ts", "env.local.js"],
"exclude": [
"node_modules/**/*",
".serverless/**/*",
".webpack/**/*",
"_warmup/**/*",
".vscode/**/*"
]
}