Webpack Nest JS не находит вложенный импорт в Windows 10 - PullRequest
1 голос
/ 01 мая 2020

Я работаю над проектом с коллегами, и следующая ошибка просто появляется на Windows 10 (я сократил среднюю часть пути). Похоже, что в Windows импорт разрешается по абсолютному пути, и каким-то образом "../" включается заранее. Мы используем Nest JS, Typescript и Webpack. Все остальные операции импорта работают без проблем, просто кажется, что все вложенные операции импорта нашего Dtos не работают.

ERROR in ./src/foo/dto/test.dto.ts
Module not found: Error: Can't resolve '../C:\project\api\src\foo\dto\reference.dto' in 'C:\project\api\src\foo\dto'

TestDto и ReferenceDto находятся в одной папке. Исходный код:

import { ReferenceDto } from './reference.dto';

export class TestDto {
  references: ReferenceDto[];
}
import { IsString } from 'class-validator';

export class ReferenceDto {
  @IsString()
  _id: string;

  @IsString()
  owner: string;
}

команда построения:

cross-env NODE_ENV=development webpack --config ./config/webpack.config.dev.babel.js

файлы webpack: webpack.config.dev.babel. js

import merge from 'webpack-merge';
import common from './webpack.config.common.babel';

export default merge(common, {
  mode: 'development',
  devtool: 'source-map',
});

webpack.config.common.babel. js:

import webpack from 'webpack';
import { resolve } from 'path';
import CopyWebpackPlugin from 'copy-webpack-plugin';
import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin';

export default {
  entry: './src/main.ts',
  target: 'node',
  optimization: {
    minimize: false,
    removeAvailableModules: false,
    removeEmptyChunks: false,
    splitChunks: false,
  },
  resolve: {
    extensions: ['.ts', '.js'],
    plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.build.json' })],
  },
  node: {
    __dirname: false,
    __filename: false,
  },
  externals: ['web3', 'pdf-parse'],
  stats: {
    // This is optional, but it hides noisey warnings
    warningsFilter: [
      'node_modules/express/lib/view.js',
      'node_modules/@nestjs/common/utils/load-package.util.js',
      'node_modules/@nestjs/core/helpers/load-adapter.js',
      'node_modules/optional/optional.js',
      'node_modules/@nestjs/core/helpers/optional-require.js',
      'node_modules/@nestjs/core/helpers/optional-require.js',
      (warning) => false,
    ],
  },
  output: {
    path: resolve(__dirname, '../dist'),
    filename: 'main.js',
    library: ['bootstrap'],
    libraryTarget: 'umd',
    umdNamedDefine: true,
  },
  module: {
    rules: [
      {
        enforce: 'pre',
        test: /\.(jsx?|tsx?)$/,
        exclude: /node_modules/,
        loader: 'eslint-loader',
      },
      {
        test: /\.ts$/,
        loader: 'ts-loader',
        include: resolve(__dirname, '../src'),
        options: {
          getCustomTransformers: (program) => ({
            before: [require('@nestjs/swagger/plugin').before({}, program)],
          }),
        },
      },
    ],
  },
  plugins: [
    new CopyWebpackPlugin([
      '../../node_modules/swagger-ui-dist/swagger-ui.css',
      '../../node_modules/swagger-ui-dist/swagger-ui-bundle.js',
      '../../node_modules/swagger-ui-dist/swagger-ui-standalone-preset.js',
      '../../node_modules/swagger-ui-dist/favicon-16x16.png',
      '../../node_modules/swagger-ui-dist/favicon-32x32.png',
    ]),
    new webpack.IgnorePlugin({
      /**
       * There is a small problem with Nest's idea of lazy require() calls,
       * Webpack tries to load these lazy imports that you may not be using,
       * so we must explicitly handle the issue.
       * Refer to: https://github.com/nestjs/nest/issues/1706
       */
      checkResource(resource) {
        const lazyImports = [
          '@nestjs/microservices',
          '@nestjs/platform-express',
          'cache-manager',
          'class-validator',
          'class-transformer',
          '@nestjs/microservices/microservices-module',
          '@nestjs/websockets/socket-module',
          'fastify-swagger',
        ];
        if (!lazyImports.includes(resource)) {
          return false;
        }
        try {
          require.resolve(resource);
        } catch (err) {
          return true;
        }
        return false;
      },
    }),
  ],
};

возможно, соответствующие зависимости:

    "tsconfig-paths-webpack-plugin": "^3.2.0",
    "typescript": "^3.8.3",
    "webpack": "^4.42.1",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.10.3",
    "webpack-merge": "^4.2.2"

Я благодарен за любую помощь, чтобы исправить эту ошибку.

...