Как связать приложение nest js с веб-пакетом - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть приложение 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()"

Пожалуйста , помогите мне решить эту странную проблему

...