У меня есть приложение Nest js, и мне нужно связать его с веб-пакетом. Пакет должен содержать весь скрипт со всеми файлами. Итак, я создал свою конфигурацию веб-пакета:
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: {
backend: './src/index.ts',
},
target: 'node',
module: {
rules: [
{
test: /.ts$/,
use: 'ts-loader',
},
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
loader: 'webpack-graphql-loader',
},
{
test: /\.mjs$/,
include: /node_modules/,
type: "javascript/auto",
}
],
},
externals: ['fsevents'],
mode: 'production',
resolve: {
extensions: ['.ts', '.mjs', '.js', '.json'],
},
output: {
path: path.join(__dirname, 'bundled'),
library: 'handler',
libraryTarget: "commonjs2"
},
plugins: [
new webpack.IgnorePlugin({
checkResource(resource) {
const lazyImports = [
'@nestjs/microservices',
'cache-manager',
'@nestjs/microservices/microservices-module',
'@nestjs/websockets/socket-module',
'class-transformer',
'apollo-server-fastify',
];
if (!lazyImports.includes(resource)) {
return false;
}
try {
require.resolve(resource);
} catch (err) {
return true;
}
return false;
},
}),
],
};
Кажется, все работает нормально, но когда я немного изменил свой код, он начал выдавать странную ошибку.
Ошибка: Nest can не разрешать зависимости от r (?). Убедитесь, что аргумент r в индексе [0] доступен в контексте s.
Потенциальные решения: - Если r поставщик, является ли он частью текущего s? - Если r экспортируется из отдельного модуля @Module, импортируется ли этот модуль в s? @Module ({import: [/ * Модуль, содержащий r * /]})
Поэтому я попытался представить минимальный пример кода и обнаружил, когда произошла ошибка. Проблема в логгере
import { Injectable, Logger } from '@nestjs/common';
@Injectable()
export class SecondService {
private readonly logger = new Logger(SecondService.name); // this line throw an error
}
Итак, если вы просто прокомментируете декларацию логгера - все начнет работать. Но это странно, потому что у меня есть FirstController
, который использует FirstService
(который тоже использует logger, но не выдает ошибку), который использует SecondService
(который использует logger и выдает ошибку).
Я думаю, что лучше использовать мой репозиторий, чем пароль здесь: https://github.com/baleksandr48/webpack_for_nestjs
Для работы:
npm run bundle && node -e "require('./bundled/backend.js').handler()"
Пожалуйста , помогите мне решить эту странную проблему