Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 如何将nestjs应用程序与Web包绑定_Webpack_Nestjs_Bundling And Minification - Fatal编程技术网

Webpack 如何将nestjs应用程序与Web包绑定

Webpack 如何将nestjs应用程序与Web包绑定,webpack,nestjs,bundling-and-minification,Webpack,Nestjs,Bundling And Minification,我有一个nestjs应用程序,我需要将其与webpack捆绑在一起。捆绑包应该包含整个脚本和所有文件。因此,我创建了我的网页包配置: const webpack = require('webpack'); const path = require('path'); module.exports = { entry: { backend: './src/index.ts', }, target: 'node', module: { rules: [ {

我有一个nestjs应用程序,我需要将其与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;
      },
    }),
  ],
};
它似乎工作正常,但当我稍微更改代码时,它开始抛出一个奇怪的错误

错误:嵌套无法解析r(?)的依赖项。请确保 索引[0]处的参数r在s上下文中可用

可能的解决办法: -如果r是一个提供者,它是当前s的一部分吗? -如果r是从单独的@Module导出的,那么该模块是否在s中导入@模块({ 导入:[/*包含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
(它也使用记录器但不抛出错误),它使用
SecondService
(它使用记录器并抛出错误)

我认为使用我的存储库比在这里传递代码更好:

运行使用:

npm run bundle && node -e "require('./bundled/backend.js').handler()"

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

你看过这个答案了吗:以及其中链接的Github问题?Kim Kern,是的,我在创建webpack.config时看过这篇文章。