如何将 Nestjs 应用程序与 webpack 捆绑在一起

Far*_*rad 10 bundling-and-minification webpack nestjs

我有一个 Nestjs 应用程序,我需要将它与 webpack 捆绑在一起。捆绑包应包含整个脚本和所有文件。所以我创建了我的 webpack 配置:

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;
      },
    }),
  ],
};
Run Code Online (Sandbox Code Playgroud)

看起来它工作正常,但是当我稍微改变我的代码时,它开始抛出一个奇怪的错误。

错误:Nest 无法解析 r (?) 的依赖关系。请确保索引 [0] 处的参数 r 在 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
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您只是评论记录器声明 - 一切都会开始工作。但这很奇怪,因为我有FirstControllerwhich use FirstService(也使用记录器但不会抛出错误)which use SecondService(使用记录器并抛出错误)。

我认为使用我的存储库比在此处传递代码更好: https: //github.com/baleksandr48/webpack_for_nestjs

对于运行使用:

npm run bundle && node -e "require('./bundled/backend.js').handler()"
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个奇怪的问题